signalTimer

simple timer using SIGALARM
git clone https://noulin.net/git/signalTimer.git
Log | Files | Refs | LICENSE

signalTimer.h (3680B)


      1 #pragma once
      2 
      3 /* Add class methods and class data where there are the TODOs (TODO)*/
      4 #define startTimerG(obj, interval, callback, args) (obj)->f->start(obj, interval, callback, args)
      5 #define stopG(obj) (obj)->f->stop(obj)
      6 #define pauseG(obj) (obj)->f->pause(obj)
      7 #define pauseProcessG(obj) (obj)->f->pauseProcess(obj)
      8 #define restartG(obj) (obj)->f->restart(obj)
      9 #define setIntervalG(obj, interval) (obj)->f->setInterval(obj, interval)
     10 
     11 /* Class signalTimer */
     12 typedef struct signalTimer signalTimert;
     13 
     14 /* for object inheriting signalTimer, cast to signalTimer to be able to use this class functions and generics*/
     15 #define cSignalTimer(self) ( (signalTimert*) self )
     16 
     17 typedef void            (*freeSignalTimerFt)      (signalTimert *self);
     18 typedef void            (*terminateSignalTimerFt) (signalTimert **self);
     19 typedef char*           (*toStringSignalTimerFt)  (signalTimert *self);
     20 typedef signalTimert*   (*duplicateSignalTimerFt) (signalTimert *self);
     21 typedef void            (*smashSignalTimerFt)     (signalTimert **self);
     22 
     23 /**
     24  * free signalTimer
     25  */
     26 typedef void            (*finishSignalTimerFt)    (signalTimert **self);
     27 
     28 typedef bool            (*startSignalTimerFt)     (signalTimert *self, u64 interval, void (*callback)(void *), void *args);
     29 typedef void            (*stopSignalTimerFt)      (signalTimert *self);
     30 typedef void            (*pauseSignalTimerFt)     (signalTimert *self);
     31 typedef void            (*pauseProcessSignalTimerFt)(signalTimert *self);
     32 typedef void            (*restartSignalTimerFt)     (signalTimert *self);
     33 typedef void            (*setIntervalSignalTimerFt) (signalTimert *self, u64 interval);
     34 /* TODO add function typedef with pattern: functionNameClassTempleFt */
     35 
     36 /**
     37  * class functions
     38  * allocated once for all objects
     39  *
     40  * freed with finalizeSignalTimer
     41  */
     42 
     43 /**
     44  * use this define in child classes and add the new function after this class functions
     45  *
     46  * in this define, add the methods after <finishSignalTimerFt    finish;>
     47  *
     48  * Example:
     49  * #define RINGFUNCTIONST \n *   SIGNALTIMERFUNCTIONST; \n *   setSizeRingFt           setSize
     50  */
     51 #define SIGNALTIMERFUNCTIONST \
     52   startSignalTimerFt        start;\
     53   stopSignalTimerFt         stop;\
     54   pauseSignalTimerFt        pause;\
     55   pauseProcessSignalTimerFt pauseProcess;\
     56   restartSignalTimerFt      restart;\
     57   setIntervalSignalTimerFt  setInterval;
     58   /* TODO ADD METHODS AFTER <finishSignalTimerFt    finish;> HERE */
     59 
     60 typedef struct {
     61   freeSignalTimerFt      free;
     62   terminateSignalTimerFt terminate;
     63   toStringSignalTimerFt  toString;
     64   duplicateSignalTimerFt duplicate;
     65   smashSignalTimerFt     smash;
     66   finishSignalTimerFt    finish;
     67   SIGNALTIMERFUNCTIONST;
     68 } signalTimerFunctionst;
     69 
     70 /**
     71  * class
     72  */
     73 struct signalTimer {
     74   const char            *type;
     75   signalTimerFunctionst *f;
     76 
     77   u64                   interval;
     78   void                  (*callback)(void *);
     79   void                  *args;
     80   /* TODO add class data */
     81 };
     82 
     83 /* signalTimer */
     84 
     85 #define createSignalTimer(obj) signalTimert obj; initiateSignalTimer(&obj)
     86 #define createAllocateSignalTimer(obj) signalTimert *obj; initiateAllocateSignalTimer(&obj)
     87 
     88 void initiateSignalTimer(signalTimert *self);
     89 void initiateAllocateSignalTimer(signalTimert **self);
     90 void finalizeSignalTimer(void);
     91 
     92 /* initialize class methods, call registerMethodsSignalTimer from classes inheriting this class */
     93 void registerMethodsSignalTimer(signalTimerFunctionst *f);
     94 
     95 signalTimert* allocSignalTimer(/*TODO INIT DATA */);
     96 
     97 /* end class signalTimer*/
     98 
     99 #define isSignalTimerCompiledWithCurrentLisheepyVersion checkLibsheepyVersionSignalTimer(LIBSHEEPY_VERSION)
    100 bool checkLibsheepyVersionSignalTimer(const char *currentLibsheepyVersion);