Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/collections/list.hfa

    rad41cbd r7806f91  
    1010// Created On       : Wed Apr 22 18:00:00 2020
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Aug  7 10:46:08 2025
    13 // Update Count     : 75
     12// Last Modified On : Thu Apr 24 18:12:59 2025
     13// Update Count     : 72
    1414//
    1515
     
    154154
    155155
     156
     157
     158
    156159forall( tE & ) {
    157160        struct dlink{
    158                 tE * next, * prev;
     161                tE * next;
     162                tE * prev;
    159163        };
    160164
     
    165169        }
    166170
    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 };
    185188                }
    186189        }
Note: See TracChangeset for help on using the changeset viewer.