1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
// Copyright © 2018–2019 Trevor Spiteri // This library is free software: you can redistribute it and/or // modify it under the terms of either // // * the Apache License, Version 2.0 or // * the MIT License // // at your option. // // You should have recieved copies of the Apache License and the MIT // License along with the library. If not, see // <https://www.apache.org/licenses/LICENSE-2.0> and // <https://opensource.org/licenses/MIT>. /*! This module contains sealed traits. */ pub(crate) use crate::{ sealed_fixed::{SealedFixed, Widest}, sealed_float::SealedFloat, sealed_int::SealedInt, }; use crate::{ types::{LeEqU128, LeEqU16, LeEqU32, LeEqU64, LeEqU8}, FixedI128, FixedI16, FixedI32, FixedI64, FixedI8, FixedU128, FixedU16, FixedU32, FixedU64, FixedU8, }; #[cfg(feature = "f16")] use half::f16; /// This trait is implemented for all the primitive integer types. /// /// This trait is sealed and cannot be implemented for more types; it /// is implemented for [`i8`], [`i16`], [`i32`], [`i64`], [`i128`], /// [`isize`], [`u8`], [`u16`], [`u32`], [`u64`], [`u128`], and /// [`usize`]. /// /// [`i128`]: https://doc.rust-lang.org/nightly/std/primitive.i128.html /// [`i16`]: https://doc.rust-lang.org/nightly/std/primitive.i16.html /// [`i32`]: https://doc.rust-lang.org/nightly/std/primitive.i32.html /// [`i64`]: https://doc.rust-lang.org/nightly/std/primitive.i64.html /// [`i8`]: https://doc.rust-lang.org/nightly/std/primitive.i8.html /// [`isize`]: https://doc.rust-lang.org/nightly/std/primitive.isize.html /// [`u128`]: https://doc.rust-lang.org/nightly/std/primitive.u128.html /// [`u16`]: https://doc.rust-lang.org/nightly/std/primitive.u16.html /// [`u32`]: https://doc.rust-lang.org/nightly/std/primitive.u32.html /// [`u64`]: https://doc.rust-lang.org/nightly/std/primitive.u64.html /// [`u8`]: https://doc.rust-lang.org/nightly/std/primitive.u8.html /// [`usize`]: https://doc.rust-lang.org/nightly/std/primitive.usize.html pub trait Int: Copy + SealedInt {} /// This trait is implemented for the primitive floating-point types, /// and for [`f16`] if the [`f16` feature] is enabled. /// /// This trait is sealed and cannot be implemented for more types; it /// is implemented for [`f32`] and [`f64`], and for [`f16`] if the /// [`f16` feature] is enabled. /// /// [`f16`]: https://docs.rs/half/^1.2/half/struct.f16.html /// [`f32`]: https://doc.rust-lang.org/nightly/std/primitive.f32.html /// [`f64`]: https://doc.rust-lang.org/nightly/std/primitive.f64.html /// [`f16` feature]: ../index.html#optional-features pub trait Float: Copy + SealedFloat {} /// This trait is implemented for all the fixed-point types. /// /// This trait is sealed and cannot be implemented for more types; it /// is implemented for [`FixedI8`], [`FixedI16`], [`FixedI32`], /// [`FixedI64`], [`FixedI128`], [`FixedU8`], [`FixedU16`], /// [`FixedU32`], [`FixedU64`], and [`FixedU128`]. /// /// [`FixedI128`]: ../struct.FixedI128.html /// [`FixedI16`]: ../struct.FixedI16.html /// [`FixedI32`]: ../struct.FixedI32.html /// [`FixedI64`]: ../struct.FixedI64.html /// [`FixedI8`]: ../struct.FixedI8.html /// [`FixedU128`]: ../struct.FixedU128.html /// [`FixedU16`]: ../struct.FixedU16.html /// [`FixedU32`]: ../struct.FixedU32.html /// [`FixedU64`]: ../struct.FixedU64.html /// [`FixedU8`]: ../struct.FixedU8.html pub trait Fixed: Copy + SealedFixed {} impl Int for i8 {} impl Int for i16 {} impl Int for i32 {} impl Int for i64 {} impl Int for i128 {} impl Int for isize {} impl Int for u8 {} impl Int for u16 {} impl Int for u32 {} impl Int for u64 {} impl Int for u128 {} impl Int for usize {} #[cfg(feature = "f16")] impl Float for f16 {} impl Float for f32 {} impl Float for f64 {} impl<Frac: LeEqU8> Fixed for FixedI8<Frac> {} impl<Frac: LeEqU16> Fixed for FixedI16<Frac> {} impl<Frac: LeEqU32> Fixed for FixedI32<Frac> {} impl<Frac: LeEqU64> Fixed for FixedI64<Frac> {} impl<Frac: LeEqU128> Fixed for FixedI128<Frac> {} impl<Frac: LeEqU8> Fixed for FixedU8<Frac> {} impl<Frac: LeEqU16> Fixed for FixedU16<Frac> {} impl<Frac: LeEqU32> Fixed for FixedU32<Frac> {} impl<Frac: LeEqU64> Fixed for FixedU64<Frac> {} impl<Frac: LeEqU128> Fixed for FixedU128<Frac> {}