Changes in src/libcfa/bits/containers.h [14a61b5:65deb18]
- File:
-
- 1 edited
-
src/libcfa/bits/containers.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/libcfa/bits/containers.h
r14a61b5 r65deb18 186 186 #endif 187 187 188 189 //-----------------------------------------------------------------------------190 // Doubly Linked List191 //-----------------------------------------------------------------------------192 #ifdef __cforall193 trait is_db_node(dtype T) {194 T*& get_next( T& );195 T*& get_prev( T& );196 };197 #endif198 199 #ifdef __cforall200 forall(dtype TYPE | is_db_node(TYPE))201 #define T TYPE202 #else203 #define T void204 #endif205 struct __dllist {206 T * head;207 };208 #undef T209 210 #ifdef __cforall211 #define __dllist_t(T) __dllist(T)212 #else213 #define __dllist_t(T) struct __dllist214 #endif215 216 #ifdef __cforall217 218 forall(dtype T | is_db_node(T))219 static inline void ?{}( __dllist(T) & this ) with( this ) {220 head{ NULL };221 }222 223 // forall(dtype T | is_db_node(T) | sized(T))224 // static inline void push_front( __dllist(T) & this, T & node ) with( this ) {225 // if ( head ) {226 // get_next( node ) = head;227 // get_prev( node ) = get_prev( *head );228 // // inserted node must be consistent before it is seen229 // // prevent code movement across barrier230 // asm( "" : : : "memory" );231 // get_prev( *head ) = node;232 // T & prev = *get_prev( node );233 // get_next( prev ) = node;234 // }235 // else {236 // get_next( node ) = &node;237 // get_prev( node ) = &node;238 // }239 240 // // prevent code movement across barrier241 // asm( "" : : : "memory" );242 // head = val;243 // }244 245 // forall(dtype T | is_db_node(T) | sized(T))246 // static inline T * remove( __dllist(T) & this, T & node ) with( this ) {247 // if ( &node == head ) {248 // if ( get_next( *head ) == head ) {249 // head = NULL;250 // }251 // else {252 // head = get_next( *head );253 // }254 // }255 // get_prev( *get_next( node ) ) = get_prev( node );256 // get_next( *get_prev( node ) ) = get_next( node );257 // get_next( node ) = NULL;258 // get_prev( node ) = NULL;259 // }260 #endif261 262 188 //----------------------------------------------------------------------------- 263 189 // Tools
Note:
See TracChangeset
for help on using the changeset viewer.