Merge #108
108: int: document PrimInt trait r=cuviper a=dvdhrm This documents the PrimInt trait, explains its intentions and features as well as mentions its origins for future reference. Closes #11. Co-authored-by: David Rheinsberg <david.rheinsberg@gmail.com>
This commit is contained in:
commit
4ab251b0a2
26
src/int.rs
26
src/int.rs
|
@ -5,6 +5,32 @@ use ops::checked::*;
|
||||||
use ops::saturating::Saturating;
|
use ops::saturating::Saturating;
|
||||||
use {Num, NumCast};
|
use {Num, NumCast};
|
||||||
|
|
||||||
|
/// Generic trait for primitive integers.
|
||||||
|
///
|
||||||
|
/// The `PrimInt` trait is an abstraction over the builtin primitive integer types (e.g., `u8`,
|
||||||
|
/// `u32`, `isize`, `i128`, ...). It inherits the basic numeric traits and extends them with
|
||||||
|
/// bitwise operators and non-wrapping arithmetic.
|
||||||
|
///
|
||||||
|
/// The trait explicitly inherits `Copy`, `Eq`, `Ord`, and `Sized`. The intention is that all
|
||||||
|
/// types implementing this trait behave like primitive types that are passed by value by default
|
||||||
|
/// and behave like builtin integers. Furthermore, the types are expected to expose the integer
|
||||||
|
/// value in binary representation and support bitwise operators. The standard bitwise operations
|
||||||
|
/// (e.g., bitwise-and, bitwise-or, right-shift, left-shift) are inherited and the trait extends
|
||||||
|
/// these with introspective queries (e.g., `PrimInt::count_ones()`, `PrimInt::leading_zeros()`),
|
||||||
|
/// bitwise combinators (e.g., `PrimInt::rotate_left()`), and endianness converters (e.g.,
|
||||||
|
/// `PrimInt::to_be()`).
|
||||||
|
///
|
||||||
|
/// All `PrimInt` types are expected to be fixed-width binary integers. The width can be queried
|
||||||
|
/// via `T::zero().count_zeros()`. The trait currently lacks a way to query the width at
|
||||||
|
/// compile-time.
|
||||||
|
///
|
||||||
|
/// While a default implementation for all builtin primitive integers is provided, the trait is in
|
||||||
|
/// no way restricted to these. Other integer types that fulfil the requirements are free to
|
||||||
|
/// implement the trait was well.
|
||||||
|
///
|
||||||
|
/// This trait and many of the method names originate in the unstable `core::num::Int` trait from
|
||||||
|
/// the rust standard library. The original trait was never stabilized and thus removed from the
|
||||||
|
/// standard library.
|
||||||
pub trait PrimInt:
|
pub trait PrimInt:
|
||||||
Sized
|
Sized
|
||||||
+ Copy
|
+ Copy
|
||||||
|
|
Loading…
Reference in New Issue