Mercurial > public > mercurial-scm > hg
view rust/hg-core/src/lib.rs @ 41242:47881d2a9d99
rust: dagop.headrevs() Rust counterparts
This introduces two Rust implementations for `mercurial.dagop.headrevs`.
The algorithm is identical to the Python version.
Depending on the caller, one or the other could be the most practical, or
the most performant, by minimizing the amount of memory copy and allocations.
Differential Revision: https://phab.mercurial-scm.org/D5580
author | Georges Racinet on ishtar.racinet.fr <georges@racinet.fr> |
---|---|
date | Mon, 14 Jan 2019 10:07:48 +0100 |
parents | 168041fa6d5f |
children | 2f54f31c41aa |
line wrap: on
line source
// Copyright 2018 Georges Racinet <gracinet@anybox.fr> // // This software may be used and distributed according to the terms of the // GNU General Public License version 2 or any later version. mod ancestors; pub mod dagops; pub use ancestors::{AncestorsIterator, LazyAncestors, MissingAncestors}; #[cfg(test)] pub mod testing; /// Mercurial revision numbers /// /// As noted in revlog.c, revision numbers are actually encoded in /// 4 bytes, and are liberally converted to ints, whence the i32 pub type Revision = i32; pub const NULL_REVISION: Revision = -1; /// The simplest expression of what we need of Mercurial DAGs. pub trait Graph { /// Return the two parents of the given `Revision`. /// /// Each of the parents can be independently `NULL_REVISION` fn parents(&self, Revision) -> Result<[Revision; 2], GraphError>; } #[derive(Clone, Debug, PartialEq)] pub enum GraphError { ParentOutOfRange(Revision), }