]> rtime.felk.cvut.cz Git - orte.git/commitdiff
Update hierarchic timers header files to version from uLUt library.
authorPavel Pisa <pisa@cmp.felk.cvut.cz>
Wed, 11 Sep 2013 09:05:28 +0000 (11:05 +0200)
committerPavel Pisa <pisa@cmp.felk.cvut.cz>
Wed, 11 Sep 2013 09:05:28 +0000 (11:05 +0200)
Signed-off-by: Pavel Pisa <pisa@cmp.felk.cvut.cz>
orte/include/ul_htimdefs.h
orte/include/ul_htimer.h
orte/include/ul_listbase.h

index d3dae41f7c0cb148260683058ae4388d0d69d2fd..f0320211ce06b88ee51aac4089906f0953a0f10e 100644 (file)
@@ -2,6 +2,9 @@
 #define _UL_HTIMDEFS_H
 
 #include "ul_utdefs.h"
+#ifdef _WIN64
+#include <stdint.h>
+#endif
 
 #ifdef __cplusplus
 extern "C" {
@@ -34,6 +37,8 @@ typedef signed long ul_msdiff_t;
 typedef ul_mstime_t ul_htim_time_t;
 typedef ul_msdiff_t ul_htim_diff_t;
 
+#define UL_HTIM_RESOLUTION 1000
+
 static inline int
 ul_htimer_cmp_fnc(const ul_htim_time_t *a, const ul_htim_time_t *b)
 {
@@ -48,6 +53,9 @@ ul_htimer_cmp_fnc(const ul_htim_time_t *a, const ul_htim_time_t *b)
 #include "orte/typedefs_defines_rtps.h"
 #include "orte/defines_api.h"
 typedef NtpTime ul_htim_time_t;
+typedef NtpTime ul_htim_diff_t;
+
+#define UL_HTIM_RESOLUTION 0x100000000
 
 static inline int
 ul_htimer_cmp_fnc(const ul_htim_time_t *a, const ul_htim_time_t *b){
@@ -61,7 +69,14 @@ ul_htimer_cmp_fnc(const ul_htim_time_t *a, const ul_htim_time_t *b){
 /* Additional, user defined fields for ul_htimer_t structure */
 #define UL_HTIMER_USER_FIELDS 
 
-typedef void (ul_htimer_fnc_t)(unsigned long data);
+#ifdef _WIN64
+typedef uintptr_t ul_htimer_fnc_data_t;
+#else
+typedef unsigned long ul_htimer_fnc_data_t;
+#endif
+/*typedef void *ul_htimer_fnc_data_t;*/
+
+typedef void (ul_htimer_fnc_t)(ul_htimer_fnc_data_t data) UL_ATTR_REENTRANT;
 
 /* The wrapper for ul_htimer_run_expired */
 #define UL_HTIMER_FNC_CALL(queue, timer, pact_time) \
index 6bdd6693d0b6a7e07135eb0f3cbddf9ebb307d6d..ce37d6058ada45071e173315b25c9858f57185b9 100644 (file)
@@ -3,7 +3,7 @@
 
   ul_htimer.h  - hierarchical timer basic declarations
 
-  (C) Copyright 2003-2004 by Pavel Pisa - Originator
+  (C) Copyright 2003-2009 by Pavel Pisa - Originator
 
   The uLan utilities library can be used, copied and modified under
   next licenses
@@ -115,12 +115,12 @@ ul_htim_queue_inline_first(ul_htim_queue_t *queue, ul_htim_node_t **phtim)
 }
 #endif /*UL_HTIMER_WITH_HPTREE*/
 
-#define UL_HTIMER_DEC(cust_prefix, cust_queue_t, cust_timer_t, \
+#define UL_HTIMER_DEC_SCOPE(cust_scope, cust_prefix, cust_queue_t, cust_timer_t, \
                cust_queue_field, cust_timer_field) \
 \
-void cust_prefix##_init_queue(cust_queue_t *queue);\
-cust_timer_t *cust_prefix##_cut_expired(cust_queue_t *queue, ul_htim_time_t *act_time);\
-int cust_prefix##_next_expire(cust_queue_t *queue, ul_htim_time_t *act_time);\
+cust_scope void cust_prefix##_init_queue(cust_queue_t *queue);\
+cust_scope cust_timer_t *cust_prefix##_cut_expired(cust_queue_t *queue, ul_htim_time_t *act_time);\
+cust_scope int cust_prefix##_next_expire(cust_queue_t *queue, ul_htim_time_t *act_time);\
 static inline int \
 cust_prefix##_add(cust_queue_t *queue, cust_timer_t *timer){ \
   return ul_htim_queue_insert(&queue->cust_queue_field, &timer->cust_timer_field); \
@@ -148,6 +148,11 @@ cust_prefix##_get_expire(cust_timer_t *timer){\
   return timer->cust_timer_field.expires;\
 }
 
+#define UL_HTIMER_DEC(cust_prefix, cust_queue_t, cust_timer_t, \
+               cust_queue_field, cust_timer_field) \
+       UL_HTIMER_DEC_SCOPE(extern, cust_prefix, cust_queue_t, cust_timer_t, \
+               cust_queue_field, cust_timer_field)
+
 #define UL_HTIMER_IMP(cust_prefix, cust_queue_t, cust_timer_t, \
                cust_queue_field, cust_timer_field) \
 \
@@ -193,7 +198,7 @@ int cust_prefix##_next_expire(cust_queue_t *queue, ul_htim_time_t *pnext_time)\
 typedef struct ul_htimer {
   ul_htim_node_t htim;
   ul_htimer_fnc_t *function;
-  unsigned long data;
+  ul_htimer_fnc_data_t data;
   UL_HTIMER_USER_FIELDS
 } ul_htimer_t;
 
@@ -216,27 +221,109 @@ void ul_htimer_run_expired(ul_htimer_queue_t *queue, ul_htim_time_t *pact_time);
  * int ul_htimer_add(ul_htimer_queue_t *queue, ul_htimer_t *timer);
  * int ul_htimer_detach(ul_htimer_queue_t *queue, ul_htimer_t *timer);
  * int ul_htimer_first_changed(ul_htimer_queue_t *queue);
- * int ul_htimer_next_expire(ul_htimer_queue_t *queue, ul_htimer_time_t *pnext_time);
- * ul_htimer_t *ul_htimer_cut_expired(ul_htimer_queue_t *queue, ul_htimer_time_t *pact_time);
+ * int ul_htimer_next_expire(ul_htimer_queue_t *queue, ul_htim_time_t *pnext_time);
+ * ul_htimer_t *ul_htimer_cut_expired(ul_htimer_queue_t *queue, ul_htim_time_t *pact_time);
  * void ul_htimer_init_detached(ul_htimer_t *timer);
- * void ul_htimer_set_expire(ul_htimer_t *timer, ul_htimer_time_t expire);
- * ul_htimer_time_t ul_htimer_get_expire(ul_htimer_t *timer);
+ * void ul_htimer_set_expire(ul_htimer_t *timer, ul_htim_time_t expire);
+ * ul_htim_time_t ul_htimer_get_expire(ul_htimer_t *timer);
  */
 
 #endif /*UL_HTIMER_WITH_STD_TYPE*/
 
+/*===========================================================*/
+/*  Standard timer support to provide default root timer */
+
+#ifdef UL_HTIMER_WITH_STD_TYPE
+
+typedef struct ul_root_htimer_ops_t {
+  int (*timer_root_init)(int options, void *context) UL_ATTR_REENTRANT;
+  ul_htimer_queue_t *(*timer_root_get)(int options, void *context) UL_ATTR_REENTRANT;
+  void (*timer_root_put)(ul_htimer_queue_t *queue) UL_ATTR_REENTRANT;
+  int (*current_time)(int options, ul_htim_time_t *htimer_time) UL_ATTR_REENTRANT;
+} ul_root_htimer_ops_t;
+
+extern ul_root_htimer_ops_t *ul_root_htimer_ops;
+extern ul_root_htimer_ops_t *ul_root_htimer_ops_compile_default;
+
+int ul_root_htimer_init(int options, void *context);
+
+static inline ul_htimer_queue_t *ul_root_htimer_get(int options, void *context)
+{
+  return ul_root_htimer_ops->timer_root_get(options, context);
+}
+
+static inline void ul_root_htimer_put(ul_htimer_queue_t *queue)
+{
+  ul_root_htimer_ops->timer_root_put(queue);
+}
+
+static inline int ul_root_htimer_current_time(int options, ul_htim_time_t *htimer_time)
+{
+  return ul_root_htimer_ops->current_time(options, htimer_time);
+}
+
+int ul_root_htimer_add(ul_htimer_t *timer);
+
+int ul_root_htimer_detach(ul_htimer_t *timer);
+#endif /*UL_HTIMER_WITH_STD_TYPE*/
+
 #ifdef UL_HTIMER_WITH_MSTIME
 #ifdef UL_HTIMER_WITH_STD_TYPE
-ul_htimer_queue_t ul_root_htimer;
+static inline int ul_htimdiff2ms(ul_msdiff_t *ms, const ul_htim_diff_t *htimdiff)
+{
+  *ms = *htimdiff;
+  return 0;
+}
+
+static inline int ul_ms2htimdiff(ul_htim_diff_t *htimdiff, const ul_msdiff_t *ms)
+{
+  *htimdiff = *ms;
+  return 0;
+}
+
+static inline int ul_htime2mstime(ul_mstime_t *ms, const ul_htim_time_t *htime)
+{
+  *ms = *htime;
+  return 0;
+}
+
+static inline int ul_mstime2htime(ul_htim_time_t *htime, const ul_mstime_t *ms)
+{
+  *htime = *ms;
+  return 0;
+}
+
+static inline int ul_htime_sub2ms(ul_msdiff_t *ms, const ul_htim_time_t *htimto,
+                                const ul_htim_time_t *htimfrom)
+{
+  ul_htim_diff_t htimdiff = *htimto - *htimfrom;
+  return ul_htimdiff2ms(ms, &htimdiff);
+}
+
+static inline int ul_htime_sub(ul_htim_diff_t *diff, const ul_htim_time_t *htimto,
+                                const ul_htim_time_t *htimfrom)
+{
+  *diff = *htimto - *htimfrom;
+  return 0;
+}
+
+static inline int ul_htime_add(ul_htim_time_t *sum, const ul_htim_time_t *htimfrom,
+                                const ul_htim_diff_t *diff)
+{
+  *sum = *htimfrom + *diff;
+  return 0;
+}
+
 #endif /*UL_HTIMER_WITH_STD_TYPE*/
-ul_mstime_t ul_mstime_last;
-ul_mstime_t ul_mstime_next;
+
+//ul_mstime_t ul_mstime_last;
+//ul_mstime_t ul_mstime_next;
 
 void ul_mstime_now(ul_mstime_t *mstm);
-void ul_mstime_update(void);
-void ul_mstime_init(void);
+//void ul_mstime_update(void);
+//void ul_mstime_init(void);
 void ul_get_log_time_str(char str[30]);
-void ul_compute_mstime_next(void);
+//void ul_compute_mstime_next(void);
 
 #endif /*UL_HTIMER_WITH_MSTIME*/
 
index 2d4feceb37804a3a3175c0f67d83c0abee5af8cc..4e80a13851a715f8e87ac91a1e03b57768399b24 100644 (file)
@@ -7,8 +7,8 @@ extern "C" {
 
 #ifndef __KERNEL__
 
-#define LIST_POISON1  ((void *) 0)
-#define LIST_POISON2  ((void *) 0)
+#define LIST_POISON1  ((struct list_head *) 0)
+#define LIST_POISON2  ((struct list_head *) 0)
 
 /*
  * Simple doubly linked list implementation.
@@ -39,14 +39,14 @@ struct list_head {
  * This is only for internal list manipulation where we know
  * the prev/next entries already!
  */
-static inline void __list_add(struct list_head *new,
+static inline void __list_add(struct list_head *newe,
                              struct list_head *prev,
                              struct list_head *next)
 {
-       next->prev = new;
-       new->next = next;
-       new->prev = prev;
-       prev->next = new;
+       next->prev = newe;
+       newe->next = next;
+       newe->prev = prev;
+       prev->next = newe;
 }
 
 /**
@@ -57,22 +57,22 @@ static inline void __list_add(struct list_head *new,
  * Insert a new entry after the specified head.
  * This is good for implementing stacks.
  */
-static inline void list_add(struct list_head *new, struct list_head *head)
+static inline void list_add(struct list_head *newe, struct list_head *head)
 {
-       __list_add(new, head, head->next);
+       __list_add(newe, head, head->next);
 }
 
 /**
  * list_add_tail - add a new entry
- * @new: new entry to be added
+ * @newe: new entry to be added
  * @head: list head to add it before
  *
  * Insert a new entry before the specified head.
  * This is useful for implementing queues.
  */
-static inline void list_add_tail(struct list_head *new, struct list_head *head)
+static inline void list_add_tail(struct list_head *newe, struct list_head *head)
 {
-       __list_add(new, head->prev, head);
+       __list_add(newe, head->prev, head);
 }
 
 /*