Changes in / [55da258:4011b98]
- Location:
- libcfa/src
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/bits/containers.hfa
r55da258 r4011b98 17 17 #include "bits/align.hfa" 18 18 #include "bits/defs.hfa" 19 #include <stdio.h> 19 20 20 //----------------------------------------------------------------------------- 21 21 // Array … … 146 146 static inline forall( dtype T | is_node(T) ) { 147 147 void ?{}( __queue(T) & this ) with( this ) { 148 (this.head){ 1p };149 (this.tail){ &this.head };150 verify(*t his.tail == 1p);148 head{ 1p }; 149 tail{ &head }; 150 verify(*tail == 1p); 151 151 } 152 152 153 153 void append( __queue(T) & this, T * val ) with( this ) { 154 verify(t his.tail != 0p);155 verify(*t his.tail == 1p);156 *t his.tail = val;157 t his.tail = &get_next( *val );158 *t his.tail = 1p;154 verify(tail != 0p); 155 verify(*tail == 1p); 156 *tail = val; 157 tail = &get_next( *val ); 158 *tail = 1p; 159 159 } 160 160 161 161 T * peek( __queue(T) & this ) { 162 162 verify(*this.tail == 1p); 163 T * front= this.head;164 if( front!= 1p ) {163 T * head = this.head; 164 if( head != 1p ) { 165 165 verify(*this.tail == 1p); 166 return front;166 return head; 167 167 } 168 168 verify(*this.tail == 1p); … … 172 172 T * pop_head( __queue(T) & this ) { 173 173 verify(*this.tail == 1p); 174 T * _head = this.head;175 if( _head != 1p ) {176 this.head = get_next( * _head );177 if( get_next( * _head ) == 1p ) {174 T * head = this.head; 175 if( head != 1p ) { 176 this.head = get_next( *head ); 177 if( get_next( *head ) == 1p ) { 178 178 this.tail = &this.head; 179 179 } 180 get_next( * _head ) = 0p;180 get_next( *head ) = 0p; 181 181 verify(*this.tail == 1p); 182 verify( get_next(* _head) == 0p );183 return _head;182 verify( get_next(*head) == 0p ); 183 return head; 184 184 } 185 185 verify(*this.tail == 1p); … … 193 193 (*it) = get_next( *val ); 194 194 195 if( t his.tail == &get_next( *val ) ) {196 t his.tail = it;195 if( tail == &get_next( *val ) ) { 196 tail = it; 197 197 } 198 198 199 199 get_next( *val ) = 0p; 200 200 201 verify( ( this.head == 1p) == (&this.head == this.tail) );202 verify( *t his.tail == 1p );201 verify( (head == 1p) == (&head == tail) ); 202 verify( *tail == 1p ); 203 203 return val; 204 204 } … … 239 239 forall(dtype T ) 240 240 static inline [void] ?{}( __dllist(T) & this, * [T * & next, T * & prev] ( T & ) __get ) { 241 (this.head){ 0p };241 this.head{ 0p }; 242 242 this.__get = __get; 243 243 } … … 248 248 void push_front( __dllist(T) & this, T & node ) with( this ) { 249 249 verify(__get); 250 if ( this.head ) {251 __get( node ).next = this.head;252 __get( node ).prev = __get( * this.head ).prev;250 if ( head ) { 251 __get( node ).next = head; 252 __get( node ).prev = __get( *head ).prev; 253 253 // inserted node must be consistent before it is seen 254 254 // prevent code movement across barrier 255 255 asm( "" : : : "memory" ); 256 __get( * this.head ).prev = &node;256 __get( *head ).prev = &node; 257 257 T & _prev = *__get( node ).prev; 258 258 __get( _prev ).next = &node; … … 264 264 // prevent code movement across barrier 265 265 asm( "" : : : "memory" ); 266 this.head = &node;266 head = &node; 267 267 } 268 268 269 269 void remove( __dllist(T) & this, T & node ) with( this ) { 270 270 verify(__get); 271 if ( &node == this.head ) {272 if ( __get( * this.head ).next == this.head ) {273 this.head = 0p;271 if ( &node == head ) { 272 if ( __get( *head ).next == head ) { 273 head = 0p; 274 274 } else { 275 this.head = __get( *this.head ).next;275 head = __get( *head ).next; 276 276 } 277 277 } -
libcfa/src/concurrency/alarm.cfa
r55da258 r4011b98 60 60 type = Kernel; 61 61 } 62 void ?{}( alarm_node_t & this, Alarm_Callback callback, Time alarm, Duration period ) with( this ) { 62 void ?{}( alarm_node_t & this, $thread * thrd, Time alarm, Duration period, Alarm_Callback callback ) with( this ) { 63 this.thrd = thrd; 63 64 this.alarm = alarm; 64 65 this.period = period; -
libcfa/src/concurrency/alarm.hfa
r55da258 r4011b98 52 52 53 53 union { 54 $thread * thrd; // thrd who created event 55 processor * proc; // proc who created event 56 Alarm_Callback callback; // callback to handle event 54 $thread * thrd; // thrd who created event 55 processor * proc; // proc who created event 57 56 }; 57 58 Alarm_Callback callback; 58 59 59 60 bool set :1; // whether or not the alarm has be registered … … 64 65 void ?{}( alarm_node_t & this, $thread * thrd, Time alarm, Duration period ); 65 66 void ?{}( alarm_node_t & this, processor * proc, Time alarm, Duration period ); 66 void ?{}( alarm_node_t & this, Alarm_Callback callback, Time alarm, Duration period);67 void ?{}( alarm_node_t & this, $thread * thrd, Time alarm, Duration period, Alarm_Callback callback ); 67 68 void ^?{}( alarm_node_t & this ); 68 69 -
libcfa/src/concurrency/locks.cfa
r55da258 r4011b98 207 207 void ^?{}( condition_variable(L) & this ){ } 208 208 209 void ?{}( alarm_node_wrap(L) & this, Time alarm, Duration period, Alarm_Callback callback ) {210 this.alarm_node{ callback, alarm, period};209 void ?{}( alarm_node_wrap(L) & this, $thread * thrd, Time alarm, Duration period, Alarm_Callback callback ) { 210 this.alarm_node{ thrd, alarm, period, callback }; 211 211 } 212 212 … … 277 277 lock( lock __cfaabi_dbg_ctx2 ); 278 278 size_t recursion_count = queue_and_get_recursion(this, &info); 279 alarm_node_wrap(L) node_wrap = { t, 0`s, alarm_node_wrap_cast };279 alarm_node_wrap(L) node_wrap = { info.t, t, 0`s, alarm_node_wrap_cast }; 280 280 node_wrap.cond = &this; 281 281 node_wrap.i = &info; -
libcfa/src/concurrency/locks.hfa
r55da258 r4011b98 164 164 }; 165 165 166 void ?{}( alarm_node_wrap(L) & this, Time alarm, Duration period, Alarm_Callback callback );166 void ?{}( alarm_node_wrap(L) & this, $thread * thrd, Time alarm, Duration period, Alarm_Callback callback ); 167 167 void ^?{}( alarm_node_wrap(L) & this ); 168 168
Note: See TracChangeset
for help on using the changeset viewer.