assembly_fdb/core/
iter.rs1use super::{Bucket, Field, Row, Table};
4use std::{iter::FlatMap, slice::Iter as SliceIter, vec::IntoIter as VecIntoIter};
5
6pub type FieldVecIter = VecIntoIter<Field>;
8
9impl IntoIterator for Row {
10 type Item = Field;
11 type IntoIter = FieldVecIter;
12
13 fn into_iter(self) -> Self::IntoIter {
14 self.into_fields().into_iter()
15 }
16}
17
18pub type FieldRefIter<'a> = SliceIter<'a, Field>;
20
21impl<'a> IntoIterator for &'a Row {
22 type Item = &'a Field;
23 type IntoIter = FieldRefIter<'a>;
24
25 fn into_iter(self) -> Self::IntoIter {
26 self.fields().iter()
27 }
28}
29
30pub type RowVecIter = VecIntoIter<Row>;
32pub type RowSliceIter<'a> = SliceIter<'a, Row>;
34
35impl IntoIterator for Bucket {
36 type Item = Row;
37 type IntoIter = RowVecIter;
38
39 fn into_iter(self) -> Self::IntoIter {
40 self.rows().into_iter()
41 }
42}
43
44impl<'a> IntoIterator for &'a Bucket {
45 type Item = &'a Row;
46 type IntoIter = RowSliceIter<'a>;
47
48 fn into_iter(self) -> Self::IntoIter {
49 self.rows_ref().iter()
50 }
51}
52
53pub type TableBucketIter = VecIntoIter<Bucket>;
55pub type BucketRowIterMapper = fn(Bucket) -> RowVecIter;
57pub type TableRowIter = FlatMap<TableBucketIter, RowVecIter, BucketRowIterMapper>;
59
60impl IntoIterator for Table {
61 type Item = Row;
62 type IntoIter = TableRowIter;
63
64 fn into_iter(self) -> Self::IntoIter {
65 self.into_buckets().into_iter().flat_map(Bucket::into_iter)
66 }
67}
68
69pub type TableBucketRefIter<'a> = SliceIter<'a, Bucket>;
71pub type BucketRowRefIterMapper<'a> = fn(&'a Bucket) -> RowSliceIter<'a>;
73pub type TableRowRefIter<'a> =
75 FlatMap<TableBucketRefIter<'a>, RowSliceIter<'a>, BucketRowRefIterMapper<'a>>;
76
77impl<'a> IntoIterator for &'a Table {
78 type Item = &'a Row;
79 type IntoIter = TableRowRefIter<'a>;
80
81 fn into_iter(self) -> Self::IntoIter {
82 self.buckets().iter().flat_map(<&Bucket>::into_iter)
83 }
84}