Changeset 639991a for src/libcfa/bits
- Timestamp:
- May 22, 2018, 2:43:09 PM (6 years ago)
- 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:
- a1a17a74
- Parents:
- cac8a6e
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/libcfa/bits/containers.h
rcac8a6e r639991a 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 226 if ( head ) { 227 __get( node ) _next = head;228 __get( node ) _prev = __get( *head )_prev;227 __get( node ).next = head; 228 __get( node ).prev = __get( *head ).prev; 229 229 // inserted node must be consistent before it is seen 230 230 // prevent code movement across barrier 231 231 asm( "" : : : "memory" ); 232 __get( *head ) _prev = &node;233 T & prev = *__get( node )_prev;234 __get( prev )_next = &node;232 __get( *head ).prev = &node; 233 T & _prev = *__get( node ).prev; 234 __get( _prev ).next = &node; 235 235 } 236 236 else { 237 __get( node ) _next = &node;238 __get( node ) _prev = &node;237 __get( node ).next = &node; 238 __get( node ).prev = &node; 239 239 } 240 240 … … 247 247 static inline void remove( __dllist(T) & this, T & node ) with( this ) { 248 248 if ( &node == head ) { 249 if ( __get( *head ) _next == head ) {249 if ( __get( *head ).next == head ) { 250 250 head = NULL; 251 251 } 252 252 else { 253 head = __get( *head ) _next;253 head = __get( *head ).next; 254 254 } 255 255 } 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 _prev256 __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 263 263 #endif 264 264
Note: See TracChangeset
for help on using the changeset viewer.