// -*- Mode: CFA -*- // // Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo // // The contents of this file are covered under the licence agreement in the // file "LICENCE" distributed with Cforall. // // alarm.h -- // // Author : Thierry Delisle // Created On : Fri Jun 2 11:31:25 2017 // Last Modified By : Thierry Delisle // Last Modified On : -- // Update Count : 0 // #ifndef ALARM_H #define ALARM_H #include "assert" typedef unsigned long int cfa_time_t; struct thread_desc; struct processor; struct alarm_node_t { cfa_time_t alarm; // time when alarm goes off cfa_time_t period; // if > 0 => period of alarm alarm_node_t * next; // intrusive link list field union { thread_desc * thrd; // thrd who created event processor * proc; // proc who created event }; }; typedef alarm_node_t ** __alarm_it_t; void ?{}( alarm_node_t * this, thread_desc * thrd, cfa_time_t alarm, cfa_time_t period = 0 ); void ?{}( alarm_node_t * this, processor * proc, cfa_time_t alarm, cfa_time_t period = 0 ); struct alarm_list_t { alarm_node_t * head; __alarm_it_t tail; }; static inline void ?{}( alarm_list_t * this ) { this->head = 0; this->tail = &this->head; } void insert( alarm_list_t * this, alarm_node_t * n ); alarm_node_t * pop( alarm_list_t * this ); #endif // Local Variables: // // mode: CFA // // tab-width: 6 // // End: //