Changeset ad41cbd for libcfa/src


Ignore:
Timestamp:
Aug 7, 2025, 11:23:26 AM (6 weeks ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
master
Children:
1bd2bff
Parents:
f0daaeb
Message:

restructure forall clauses for dlist

File:
1 edited

Legend:

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

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