libutils_constrangeiter/
mod.rs1#![no_std]
7
8#![feature(const_trait_impl)]
10#![feature(const_iter)]
11#![feature(const_ops)]
12#![feature(const_closures)]
13#![feature(const_option_ops)]
14#![feature(const_convert)]
15#![feature(const_try)]
16#![feature(const_cmp)]
17#![feature(trusted_len)]
18#![feature(test)]
19#![feature(const_destruct)]
20#![feature(new_range)]
21
22extern crate alloc;
24extern crate test;
25
26mod range;
28mod rangefrom;
29mod rangeinclusive;
30#[cfg(test)]
31mod tests;
32
33use core::{
35 ops::{
36 AddAssign,
37 SubAssign,
38 Sub
39 },
40 marker::Destruct
41};
42
43
44pub const trait ConstIntoIterator {
50 type Item;
51 type IntoIter: const Iterator<Item = Self::Item>;
52 fn const_into_iter(self) -> Self::IntoIter;
53}
54
55
56pub const trait Target: Copy + const AddAssign + const SubAssign + const PartialOrd + const Sub<Output = Self> + const Destruct
62where usize: const TryFrom<Self>, <usize as TryFrom<Self>>::Error: const Destruct {
63 const ONE: Self;
64 const MAX: Self;
65 fn hint(self, start: Self) -> (usize, Option<usize>) {match usize::try_from(self - start) {
66 Ok(number) => (number, Some(number)),
67 Err(_) => (usize::MAX, None)
68 }}
69}
70
71const impl Target for u8 {
73 const ONE: Self = 1u8;
74 const MAX: Self = u8::MAX;
75 fn hint(self, start: Self) -> (usize, Option<usize>) {match usize::try_from(self - start) {
76 Ok(number) => (number, Some(number)),
77 Err(_) => (usize::MAX, None)
78 }}
79}
80
81const impl Target for i8 {
83 const ONE: Self = 1i8;
84 const MAX: Self = i8::MAX;
85 fn hint(self, start: Self) -> (usize, Option<usize>) {match usize::try_from(self - start) {
86 Ok(number) => (number, Some(number)),
87 Err(_) => (usize::MAX, None)
88 }}
89}
90
91const impl Target for u16 {
93 const ONE: Self = 1u16;
94 const MAX: Self = u16::MAX;
95 fn hint(self, start: Self) -> (usize, Option<usize>) {match usize::try_from(self - start) {
96 Ok(number) => (number, Some(number)),
97 Err(_) => (usize::MAX, None)
98 }}
99}
100
101const impl Target for i16 {
103 const ONE: Self = 1i16;
104 const MAX: Self = i16::MAX;
105 fn hint(self, start: Self) -> (usize, Option<usize>) {match usize::try_from(self - start) {
106 Ok(number) => (number, Some(number)),
107 Err(_) => (usize::MAX, None)
108 }}
109}
110
111const impl Target for u32 {
113 const ONE: Self = 1u32;
114 const MAX: Self = u32::MAX;
115 fn hint(self, start: Self) -> (usize, Option<usize>) {match usize::try_from(self - start) {
116 Ok(number) => (number, Some(number)),
117 Err(_) => (usize::MAX, None)
118 }}
119}
120
121const impl Target for i32 {
123 const ONE: Self = 1i32;
124 const MAX: Self = i32::MAX;
125 fn hint(self, start: Self) -> (usize, Option<usize>) {match usize::try_from(self - start) {
126 Ok(number) => (number, Some(number)),
127 Err(_) => (usize::MAX, None)
128 }}
129}
130
131const impl Target for u64 {
133 const ONE: Self = 1u64;
134 const MAX: Self = u64::MAX;
135 fn hint(self, start: Self) -> (usize, Option<usize>) {match usize::try_from(self - start) {
136 Ok(number) => (number, Some(number)),
137 Err(_) => (usize::MAX, None)
138 }}
139}
140
141const impl Target for i64 {
143 const ONE: Self = 1i64;
144 const MAX: Self = i64::MAX;
145 fn hint(self, start: Self) -> (usize, Option<usize>) {match usize::try_from(self - start) {
146 Ok(number) => (number, Some(number)),
147 Err(_) => (usize::MAX, None)
148 }}
149}
150
151const impl Target for u128 {
153 const ONE: Self = 1u128;
154 const MAX: Self = u128::MAX;
155 fn hint(self, start: Self) -> (usize, Option<usize>) {match usize::try_from(self - start) {
156 Ok(number) => (number, Some(number)),
157 Err(_) => (usize::MAX, None)
158 }}
159}
160
161const impl Target for i128 {
163 const ONE: Self = 1i128;
164 const MAX: Self = i128::MAX;
165 fn hint(self, start: Self) -> (usize, Option<usize>) {match usize::try_from(self - start) {
166 Ok(number) => (number, Some(number)),
167 Err(_) => (usize::MAX, None)
168 }}
169}
170
171const impl Target for usize {
173 const ONE: Self = 1usize;
174 const MAX: Self = usize::MAX;
175 fn hint(self, start: Self) -> (usize, Option<usize>) {match usize::try_from(self - start) {
176 Ok(number) => (number, Some(number)),
177 Err(_) => (usize::MAX, None)
178 }}
179}
180
181const impl Target for isize {
183 const ONE: Self = 1isize;
184 const MAX: Self = isize::MAX;
185 fn hint(self, start: Self) -> (usize, Option<usize>) {match usize::try_from(self - start) {
186 Ok(number) => (number, Some(number)),
187 Err(_) => (usize::MAX, None)
188 }}
189}