/rust/registry/src/index.crates.io-6f17d22bba15001f/cranelift-entity-0.91.1/src/keys.rs
| Line | Count | Source | 
| 1 |  | //! A double-ended iterator over entity references. | 
| 2 |  | //! | 
| 3 |  | //! When `core::iter::Step` is stabilized, `Keys` could be implemented as a wrapper around | 
| 4 |  | //! `core::ops::Range`, but for now, we implement it manually. | 
| 5 |  |  | 
| 6 |  | use crate::EntityRef; | 
| 7 |  | use core::marker::PhantomData; | 
| 8 |  |  | 
| 9 |  | /// Iterate over all keys in order. | 
| 10 |  | pub struct Keys<K: EntityRef> { | 
| 11 |  |     pos: usize, | 
| 12 |  |     rev_pos: usize, | 
| 13 |  |     unused: PhantomData<K>, | 
| 14 |  | } | 
| 15 |  |  | 
| 16 |  | impl<K: EntityRef> Keys<K> { | 
| 17 |  |     /// Create a `Keys` iterator that visits `len` entities starting from 0. | 
| 18 | 2.09M |     pub fn with_len(len: usize) -> Self { | 
| 19 | 2.09M |         Self { | 
| 20 | 2.09M |             pos: 0, | 
| 21 | 2.09M |             rev_pos: len, | 
| 22 | 2.09M |             unused: PhantomData, | 
| 23 | 2.09M |         } | 
| 24 | 2.09M |     } Unexecuted instantiation: <cranelift_entity::keys::Keys<cranelift_codegen::ir::entities::Block>>::with_len<cranelift_entity::keys::Keys<cranelift_codegen::machinst::vcode::VCodeConstant>>::with_len| Line | Count | Source |  | 18 | 139k |     pub fn with_len(len: usize) -> Self { |  | 19 | 139k |         Self { |  | 20 | 139k |             pos: 0, |  | 21 | 139k |             rev_pos: len, |  | 22 | 139k |             unused: PhantomData, |  | 23 | 139k |         } |  | 24 | 139k |     } | 
<cranelift_entity::keys::Keys<cranelift_codegen::ir::entities::SigRef>>::with_len| Line | Count | Source |  | 18 | 139k |     pub fn with_len(len: usize) -> Self { |  | 19 | 139k |         Self { |  | 20 | 139k |             pos: 0, |  | 21 | 139k |             rev_pos: len, |  | 22 | 139k |             unused: PhantomData, |  | 23 | 139k |         } |  | 24 | 139k |     } | 
<cranelift_entity::keys::Keys<cranelift_codegen::loop_analysis::Loop>>::with_len| Line | Count | Source |  | 18 | 418k |     pub fn with_len(len: usize) -> Self { |  | 19 | 418k |         Self { |  | 20 | 418k |             pos: 0, |  | 21 | 418k |             rev_pos: len, |  | 22 | 418k |             unused: PhantomData, |  | 23 | 418k |         } |  | 24 | 418k |     } | 
<cranelift_entity::keys::Keys<cranelift_codegen::ir::entities::GlobalValue>>::with_len| Line | Count | Source |  | 18 | 1.39M |     pub fn with_len(len: usize) -> Self { |  | 19 | 1.39M |         Self { |  | 20 | 1.39M |             pos: 0, |  | 21 | 1.39M |             rev_pos: len, |  | 22 | 1.39M |             unused: PhantomData, |  | 23 | 1.39M |         } |  | 24 | 1.39M |     } | 
 | 
| 25 |  | } | 
| 26 |  |  | 
| 27 |  | impl<K: EntityRef> Iterator for Keys<K> { | 
| 28 |  |     type Item = K; | 
| 29 |  |  | 
| 30 | 2.29M |     fn next(&mut self) -> Option<Self::Item> { | 
| 31 | 2.29M |         if self.pos < self.rev_pos { | 
| 32 | 339k |             let k = K::new(self.pos); | 
| 33 | 339k |             self.pos += 1; | 
| 34 | 339k |             Some(k) | 
| 35 |  |         } else { | 
| 36 | 1.95M |             None | 
| 37 |  |         } | 
| 38 | 2.29M |     } Unexecuted instantiation: <cranelift_entity::keys::Keys<cranelift_codegen::ir::entities::Block> as core::iter::traits::iterator::Iterator>::next<cranelift_entity::keys::Keys<cranelift_codegen::loop_analysis::Loop> as core::iter::traits::iterator::Iterator>::next| Line | Count | Source |  | 30 | 283k |     fn next(&mut self) -> Option<Self::Item> { |  | 31 | 283k |         if self.pos < self.rev_pos { |  | 32 | 4.39k |             let k = K::new(self.pos); |  | 33 | 4.39k |             self.pos += 1; |  | 34 | 4.39k |             Some(k) |  | 35 |  |         } else { |  | 36 | 278k |             None |  | 37 |  |         } |  | 38 | 283k |     } | 
<cranelift_entity::keys::Keys<cranelift_codegen::ir::entities::GlobalValue> as core::iter::traits::iterator::Iterator>::next| Line | Count | Source |  | 30 | 1.63M |     fn next(&mut self) -> Option<Self::Item> { |  | 31 | 1.63M |         if self.pos < self.rev_pos { |  | 32 | 237k |             let k = K::new(self.pos); |  | 33 | 237k |             self.pos += 1; |  | 34 | 237k |             Some(k) |  | 35 |  |         } else { |  | 36 | 1.39M |             None |  | 37 |  |         } |  | 38 | 1.63M |     } | 
<cranelift_entity::keys::Keys<cranelift_codegen::ir::entities::SigRef> as core::iter::traits::iterator::Iterator>::next| Line | Count | Source |  | 30 | 199k |     fn next(&mut self) -> Option<Self::Item> { |  | 31 | 199k |         if self.pos < self.rev_pos { |  | 32 | 59.9k |             let k = K::new(self.pos); |  | 33 | 59.9k |             self.pos += 1; |  | 34 | 59.9k |             Some(k) |  | 35 |  |         } else { |  | 36 | 139k |             None |  | 37 |  |         } |  | 38 | 199k |     } | 
<cranelift_entity::keys::Keys<cranelift_codegen::machinst::vcode::VCodeConstant> as core::iter::traits::iterator::Iterator>::next| Line | Count | Source |  | 30 | 176k |     fn next(&mut self) -> Option<Self::Item> { |  | 31 | 176k |         if self.pos < self.rev_pos { |  | 32 | 37.2k |             let k = K::new(self.pos); |  | 33 | 37.2k |             self.pos += 1; |  | 34 | 37.2k |             Some(k) |  | 35 |  |         } else { |  | 36 | 139k |             None |  | 37 |  |         } |  | 38 | 176k |     } | 
 | 
| 39 |  |  | 
| 40 |  |     fn size_hint(&self) -> (usize, Option<usize>) { | 
| 41 |  |         let size = self.rev_pos - self.pos; | 
| 42 |  |         (size, Some(size)) | 
| 43 |  |     } | 
| 44 |  | } | 
| 45 |  |  | 
| 46 |  | impl<K: EntityRef> DoubleEndedIterator for Keys<K> { | 
| 47 | 141k |     fn next_back(&mut self) -> Option<Self::Item> { | 
| 48 | 141k |         if self.rev_pos > self.pos { | 
| 49 | 2.19k |             let k = K::new(self.rev_pos - 1); | 
| 50 | 2.19k |             self.rev_pos -= 1; | 
| 51 | 2.19k |             Some(k) | 
| 52 |  |         } else { | 
| 53 | 139k |             None | 
| 54 |  |         } | 
| 55 | 141k |     } | 
| 56 |  | } | 
| 57 |  |  | 
| 58 |  | impl<K: EntityRef> ExactSizeIterator for Keys<K> {} |