Changeset 2c88368 for src/libcfa/bits/containers.h
- Timestamp:
- May 22, 2018, 4:46:29 PM (5 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, 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. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/libcfa/bits/containers.h
ra8706fc r2c88368 220 220 } 221 221 222 #define _next .0223 #define _prev .1222 #define next 0 223 #define prev 1 224 224 forall(dtype T | sized(T)) 225 225 static inline void push_front( __dllist(T) & this, T & node ) with( this ) { 226 verify(__get); 226 227 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; 229 230 // inserted node must be consistent before it is seen 230 231 // prevent code movement across barrier 231 232 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; 235 236 } 236 237 else { 237 __get( node ) _next = &node;238 __get( node ) _prev = &node;238 __get( node ).next = &node; 239 __get( node ).prev = &node; 239 240 } 240 241 … … 246 247 forall(dtype T | sized(T)) 247 248 static inline void remove( __dllist(T) & this, T & node ) with( this ) { 249 verify(__get); 248 250 if ( &node == head ) { 249 if ( __get( *head ) _next == head ) {251 if ( __get( *head ).next == head ) { 250 252 head = NULL; 251 253 } 252 254 else { 253 head = __get( *head ) _next;255 head = __get( *head ).next; 254 256 } 255 257 } 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 _next262 #undef _prev258 __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 263 265 #endif 264 266
Note: See TracChangeset
for help on using the changeset viewer.