Changeset ad41cbd for libcfa/src
- Timestamp:
- Aug 7, 2025, 11:23:26 AM (6 weeks ago)
- Branches:
- master
- Children:
- 1bd2bff
- Parents:
- f0daaeb
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/collections/list.hfa
rf0daaeb rad41cbd 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 pr 24 18:12:59202513 // Update Count : 7 212 // Last Modified On : Thu Aug 7 10:46:08 2025 13 // Update Count : 75 14 14 // 15 15 … … 154 154 155 155 156 157 158 159 156 forall( tE & ) { 160 157 struct dlink{ 161 tE * next; 162 tE * prev; 158 tE * next, * prev; 163 159 }; 164 160 … … 169 165 } 170 166 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 }; 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 } 188 185 } 189 186 }
Note:
See TracChangeset
for help on using the changeset viewer.