Changeset 2c88368 for src/libcfa/bits


Ignore:
Timestamp:
May 22, 2018, 4:46:29 PM (6 years ago)
Author:
Rob Schluntz <rschlunt@…>
Branches:
ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, with_gc
Children:
59c034c6, d807ca28
Parents:
a8706fc (diff), a1a17a7 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' of plg.uwaterloo.ca:/u/cforall/software/cfa/cfa-cc

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/libcfa/bits/containers.h

    ra8706fc r2c88368  
    220220        }
    221221
    222         #define _next .0
    223         #define _prev .1
     222        #define next 0
     223        #define prev 1
    224224        forall(dtype T | sized(T))
    225225        static inline void push_front( __dllist(T) & this, T & node ) with( this ) {
     226                verify(__get);
    226227                if ( head ) {
    227                         __get( node )_next = head;
    228                         __get( node )_prev = __get( *head )_prev;
     228                        __get( node ).next = head;
     229                        __get( node ).prev = __get( *head ).prev;
    229230                        // inserted node must be consistent before it is seen
    230231                        // prevent code movement across barrier
    231232                        asm( "" : : : "memory" );
    232                         __get( *head )_prev = &node;
    233                         T & prev = *__get( node )_prev;
    234                         __get( prev )_next = &node;
     233                        __get( *head ).prev = &node;
     234                        T & _prev = *__get( node ).prev;
     235                        __get( _prev ).next = &node;
    235236                }
    236237                else {
    237                         __get( node )_next = &node;
    238                         __get( node )_prev = &node;
     238                        __get( node ).next = &node;
     239                        __get( node ).prev = &node;
    239240                }
    240241
     
    246247        forall(dtype T | sized(T))
    247248        static inline void remove( __dllist(T) & this, T & node ) with( this ) {
     249                verify(__get);
    248250                if ( &node == head ) {
    249                         if ( __get( *head )_next == head ) {
     251                        if ( __get( *head ).next == head ) {
    250252                                head = NULL;
    251253                        }
    252254                        else {
    253                                 head = __get( *head )_next;
     255                                head = __get( *head ).next;
    254256                        }
    255257                }
    256                 __get( *__get( node )_next )_prev = __get( node )_prev;
    257                 __get( *__get( node )_prev )_next = __get( node )_next;
    258                 __get( node )_next = NULL;
    259                 __get( node )_prev = NULL;
    260         }
    261         #undef _next
    262         #undef _prev
     258                __get( *__get( node ).next ).prev = __get( node ).prev;
     259                __get( *__get( node ).prev ).next = __get( node ).next;
     260                __get( node ).next = NULL;
     261                __get( node ).prev = NULL;
     262        }
     263        #undef next
     264        #undef prev
    263265#endif
    264266
Note: See TracChangeset for help on using the changeset viewer.