Struct xor_name::XorName
[−]
[src]
pub struct XorName(pub [u8; 64]);
A XOR_NAME_BITS
-bit number, viewed as a point in XOR space.
This has as its only field an array of XOR_NAME_LEN
bytes,
i. e. a number between 0 and 2XOR_NAME_BITS - 1, the XorName
's "ID".
XOR space is the space of these numbers, with the XOR metric as a notion of distance,
i. e. the points with IDs x
and y
are considered to have distance x xor y
.
Methods
impl XorName
[src]
fn new(id: [u8; 64]) -> XorName
Construct a XorName from a XOR_NAME_LEN
byte array.
fn get_id(&self) -> [u8; 64]
Return the internal array.
fn as_hex(&self) -> String
Hex-encode the XorName
as a String
.
fn bucket_distance(&self, name: &XorName) -> usize
Deprecated
Currently identical to bucket_index
. This method will be replaced with
XOR_NAME_BITS - bucket_index
or removed entirely.
fn cmp_closeness(&self, lhs: &XorName, rhs: &XorName) -> Ordering
Deprecated
Use the equivalent cmp_distance
instead.
fn bucket_index(&self, name: &XorName) -> usize
Returns the number of leading bits in which self
and name
agree.
Here, "leading bits" means the most significant bits. E. g. for 10101...
and 10011...
,
that value will be 2, as their common prefix 10
has length 2 and the third bit is the
first one in which they disagree.
Equivalently, this is XOR_NAME_BITS - bucket_distance
, where bucket_distance
is the
length of the remainders after the common prefix is removed from the IDs of self
and
name
.
The bucket distance is the magnitude of the XOR distance. More precisely, if d > 0
is the
XOR distance between self
and name
, the bucket distance equals floor(log2(d))
, i. e.
a bucket distance of n
means that 2n - 1
<= d <
2n
.
fn with_flipped_bit(&self, index: usize) -> Result<XorName, BitIndexOutOfBoundsError>
Returns a copy of self
, with the index
-th bit flipped.
If the parameter does not address one of the name's bits, i. e. if it does not satisfy
index < XOR_NAME_BITS
, the result will be an error.
fn count_differing_bits(&self, other: &XorName) -> u32
Returns the number of bits in which self
differs from other
.
fn cmp_distance(&self, lhs: &XorName, rhs: &XorName) -> Ordering
Compares lhs
and rhs
with respect to their distance from self
.
fn from_hex(s: &str) -> Result<XorName, XorNameFromHexError>
Hex-decode a XorName
from a &str
.
Trait Implementations
impl Copy for XorName
[src]
impl Eq for XorName
[src]
impl Debug for XorName
[src]
impl Display for XorName
[src]
impl PartialEq for XorName
[src]
fn eq(&self, other: &XorName) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
1.0.0
This method tests for !=
.
impl Rand for XorName
[src]
fn rand<R: Rng>(rng: &mut R) -> XorName
Generates a random instance of this type using the specified source of randomness. Read more
impl Ord for XorName
[src]
The XorName
s can be ordered from zero as an integer. This is equivalent to ordering them by
their distance from the name 0
.
fn cmp(&self, other: &XorName) -> Ordering
This method returns an Ordering
between self
and other
. Read more
impl PartialOrd for XorName
[src]
fn partial_cmp(&self, other: &XorName) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
1.0.0
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
1.0.0
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
1.0.0
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
1.0.0
This method tests greater than or equal to (for self
and other
) and is used by the >=
operator. Read more
impl Hash for XorName
[src]
fn hash<H: Hasher>(&self, state: &mut H)
Feeds this value into the state given, updating the hasher as necessary.
fn hash_slice<H>(data: &[Self], state: &mut H) where H: Hasher
1.3.0
Feeds a slice of this type into the state provided.
impl Clone for XorName
[src]
fn clone(&self) -> Self
Returns a copy of the value. Read more
fn clone_from(&mut self, source: &Self)
1.0.0
Performs copy-assignment from source
. Read more
impl Index<Range<usize>> for XorName
[src]
type Output = [u8]
The returned type after indexing
fn index(&self, index: Range<usize>) -> &[u8]
The method for the indexing (Foo[Bar]
) operation
impl Index<RangeTo<usize>> for XorName
[src]
type Output = [u8]
The returned type after indexing
fn index(&self, index: RangeTo<usize>) -> &[u8]
The method for the indexing (Foo[Bar]
) operation
impl Index<RangeFrom<usize>> for XorName
[src]
type Output = [u8]
The returned type after indexing
fn index(&self, index: RangeFrom<usize>) -> &[u8]
The method for the indexing (Foo[Bar]
) operation
impl Index<RangeFull> for XorName
[src]
type Output = [u8]
The returned type after indexing
fn index(&self, index: RangeFull) -> &[u8]
The method for the indexing (Foo[Bar]
) operation