@@ -60,21 +60,42 @@ impl<T> Table<T> {
6060 self . source_node_id . extend ( table. source_node_id ) ;
6161 }
6262
63- pub fn iter ( self ) -> impl DoubleEndedIterator < Item = TableRow < T > > {
64- self . element
65- . into_iter ( )
66- . zip ( self . transform )
67- . zip ( self . alpha_blending )
68- . zip ( self . source_node_id )
69- . map ( |( ( ( element, transform) , alpha_blending) , source_node_id) | TableRow {
70- element,
71- transform,
72- alpha_blending,
73- source_node_id,
74- } )
63+ pub fn get ( & self , index : usize ) -> Option < TableRowRef < ' _ , T > > {
64+ if index >= self . element . len ( ) {
65+ return None ;
66+ }
67+
68+ Some ( TableRowRef {
69+ element : & self . element [ index] ,
70+ transform : & self . transform [ index] ,
71+ alpha_blending : & self . alpha_blending [ index] ,
72+ source_node_id : & self . source_node_id [ index] ,
73+ } )
74+ }
75+
76+ pub fn get_mut ( & mut self , index : usize ) -> Option < TableRowMut < ' _ , T > > {
77+ if index >= self . element . len ( ) {
78+ return None ;
79+ }
80+
81+ Some ( TableRowMut {
82+ element : & mut self . element [ index] ,
83+ transform : & mut self . transform [ index] ,
84+ alpha_blending : & mut self . alpha_blending [ index] ,
85+ source_node_id : & mut self . source_node_id [ index] ,
86+ } )
87+ }
88+
89+ pub fn len ( & self ) -> usize {
90+ self . element . len ( )
91+ }
92+
93+ pub fn is_empty ( & self ) -> bool {
94+ self . element . is_empty ( )
7595 }
7696
77- pub fn iter_ref ( & self ) -> impl DoubleEndedIterator < Item = TableRowRef < ' _ , T > > + Clone {
97+ /// Borrows a [`Table`] and returns an iterator of [`TableRowRef`]s, each containing references to the data of the respective row from the table.
98+ pub fn iter ( & self ) -> impl DoubleEndedIterator < Item = TableRowRef < ' _ , T > > + Clone {
7899 self . element
79100 . iter ( )
80101 . zip ( self . transform . iter ( ) )
@@ -88,6 +109,7 @@ impl<T> Table<T> {
88109 } )
89110 }
90111
112+ /// Mutably borrows a [`Table`] and returns an iterator of [`TableRowMut`]s, each containing mutable references to the data of the respective row from the table.
91113 pub fn iter_mut ( & mut self ) -> impl DoubleEndedIterator < Item = TableRowMut < ' _ , T > > {
92114 self . element
93115 . iter_mut ( )
@@ -101,39 +123,44 @@ impl<T> Table<T> {
101123 source_node_id,
102124 } )
103125 }
126+ }
104127
105- pub fn get ( & self , index : usize ) -> Option < TableRowRef < ' _ , T > > {
106- if index >= self . element . len ( ) {
107- return None ;
108- }
109-
110- Some ( TableRowRef {
111- element : & self . element [ index] ,
112- transform : & self . transform [ index] ,
113- alpha_blending : & self . alpha_blending [ index] ,
114- source_node_id : & self . source_node_id [ index] ,
115- } )
116- }
128+ impl < T > IntoIterator for Table < T > {
129+ type Item = TableRow < T > ;
130+ type IntoIter = TableRowIter < T > ;
117131
118- pub fn get_mut ( & mut self , index : usize ) -> Option < TableRowMut < ' _ , T > > {
119- if index >= self . element . len ( ) {
120- return None ;
132+ /// Consumes a [`Table`] and returns an iterator of [`TableRow`]s, each containing the owned data of the respective row from the original table.
133+ fn into_iter ( self ) -> Self :: IntoIter {
134+ TableRowIter {
135+ element : self . element . into_iter ( ) ,
136+ transform : self . transform . into_iter ( ) ,
137+ alpha_blending : self . alpha_blending . into_iter ( ) ,
138+ source_node_id : self . source_node_id . into_iter ( ) ,
121139 }
122-
123- Some ( TableRowMut {
124- element : & mut self . element [ index] ,
125- transform : & mut self . transform [ index] ,
126- alpha_blending : & mut self . alpha_blending [ index] ,
127- source_node_id : & mut self . source_node_id [ index] ,
128- } )
129140 }
141+ }
130142
131- pub fn len ( & self ) -> usize {
132- self . element . len ( )
133- }
143+ pub struct TableRowIter < T > {
144+ element : std:: vec:: IntoIter < T > ,
145+ transform : std:: vec:: IntoIter < DAffine2 > ,
146+ alpha_blending : std:: vec:: IntoIter < AlphaBlending > ,
147+ source_node_id : std:: vec:: IntoIter < Option < NodeId > > ,
148+ }
149+ impl < T > Iterator for TableRowIter < T > {
150+ type Item = TableRow < T > ;
134151
135- pub fn is_empty ( & self ) -> bool {
136- self . element . is_empty ( )
152+ fn next ( & mut self ) -> Option < Self :: Item > {
153+ let element = self . element . next ( ) ?;
154+ let transform = self . transform . next ( ) ?;
155+ let alpha_blending = self . alpha_blending . next ( ) ?;
156+ let source_node_id = self . source_node_id . next ( ) ?;
157+
158+ Some ( TableRow {
159+ element,
160+ transform,
161+ alpha_blending,
162+ source_node_id,
163+ } )
137164 }
138165}
139166
0 commit comments