Changes in libcfa/src/collections/list.hfa [ad41cbd:7806f91]
- File:
-
- 1 edited
-
libcfa/src/collections/list.hfa (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/collections/list.hfa
rad41cbd r7806f91 10 10 // Created On : Wed Apr 22 18:00:00 2020 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu A ug 7 10:46:08202513 // Update Count : 7 512 // Last Modified On : Thu Apr 24 18:12:59 2025 13 // Update Count : 72 14 14 // 15 15 … … 154 154 155 155 156 157 158 156 159 forall( tE & ) { 157 160 struct dlink{ 158 tE * next, * prev; 161 tE * next; 162 tE * prev; 159 163 }; 160 164 … … 165 169 } 166 170 167 forall( tLinks & = dlink( tE ) ) { 168 struct dlist { 169 inline dlink( tE ); 170 }; 171 172 forall( | embedded( tE, tLinks, dlink( tE ) ) ) { 173 static inline tE * $get_list_origin_addr( dlist( tE, tLinks ) & list ) { 174 dlink( tE ) & link_from_null = (*(tE *)0p)`inner; 175 ptrdiff_t link_offset = (ptrdiff_t)&link_from_null; 176 size_t origin_addr = ((size_t)&list) - link_offset; 177 size_t preResult = ORIGIN_TAG_SET( origin_addr ); 178 return (tE *)preResult; 179 } 180 181 static inline void ?{}( dlist( tE, tLinks ) & this ) { 182 tE * listOrigin = $get_list_origin_addr( this ); 183 ((dlink( tE ) &)this){ listOrigin, listOrigin }; 184 } 171 forall( tLinks & = dlink( tE ) ) 172 struct dlist { 173 inline dlink( tE ); 174 }; 175 176 forall( tLinks & | embedded( tE, tLinks, dlink( tE ) ) ) { 177 static inline tE * $get_list_origin_addr( dlist( tE, tLinks ) & list ) { 178 dlink( tE ) & link_from_null = (*(tE *)0p)`inner; 179 ptrdiff_t link_offset = (ptrdiff_t)&link_from_null; 180 size_t origin_addr = ((size_t)&list) - link_offset; 181 size_t preResult = ORIGIN_TAG_SET( origin_addr ); 182 return (tE *)preResult; 183 } 184 185 static inline void ?{}( dlist( tE, tLinks ) & this ) { 186 tE * listOrigin = $get_list_origin_addr( this ); 187 ((dlink( tE ) &)this){ listOrigin, listOrigin }; 185 188 } 186 189 }
Note:
See TracChangeset
for help on using the changeset viewer.