From 8723885361861e1625d0588e574e121a86ee14b4 Mon Sep 17 00:00:00 2001
From: Florian Prill <florian.prill@dwd.de>
Date: Tue, 11 Jun 2019 08:34:49 +0200
Subject: [PATCH] [develop_event_hl]  fixed raw isActive routine.

---
 src/mtime_eventHandling.c | 113 +++++++++++++++++++++-----------------
 1 file changed, 62 insertions(+), 51 deletions(-)

diff --git a/src/mtime_eventHandling.c b/src/mtime_eventHandling.c
index 90c27254..27a45a47 100644
--- a/src/mtime_eventHandling.c
+++ b/src/mtime_eventHandling.c
@@ -764,13 +764,15 @@ isTriggerTimeInRange(struct _datetime* current_dt, struct _datetime* triggerNext
  */
 
 bool
-isCurrentEventActiveRaw(bool               event_neverTriggerEvent,
-                        struct _datetime** event_eventsLastEvaluationDateTime,
+isCurrentEventActiveRaw(/* in: */
+                        struct _datetime*  current_dt,
                         struct _datetime*  event_eventFirstDateTime,
                         struct _datetime*  event_eventLastDateTime,
-                        struct _datetime*  event_triggerNextEventDateTime,
                         struct _timedelta* event_eventInterval,
-                        struct _datetime*  event_triggeredPreviousEventDateTime,
+                        struct _timedelta* plus_slack,
+                        struct _timedelta* minus_slack,
+                        /* out: */
+                        bool *event_neverTriggerEvent,
                         bool *event_triggerCurrentEvent,
                         bool *event_eventisFirstInDay,
                         bool *event_eventisFirstInMonth,
@@ -780,19 +782,30 @@ isCurrentEventActiveRaw(bool               event_neverTriggerEvent,
                         bool *event_eventisLastInYear,
                         bool *event_nextEventIsFirst,
                         bool *event_lastEventWasFinal,
-                        struct _datetime*  current_dt,
-                        struct _timedelta* plus_slack,
-                        struct _timedelta* minus_slack)
+                        struct _datetime** event_triggerNextEventDateTime,
+                        struct _datetime** event_eventsLastEvaluationDateTime,
+                        struct _datetime** event_triggeredPreviousEventDateTime)
 {
 
-  /* TODO */
   /* check for undefined input. allowed slacks can be NULL. */
-  if ((current_dt != NULL) ||
-      (*event_eventsLastEvaluationDateTime != NULL)) return false;
-
-  if (event_neverTriggerEvent) return false;
-
-  /* If Event has been triggered for a datetime and checked once again
+  if (current_dt == NULL) {fprintf(stderr,"6\n"); return false;}
+  if ((event_eventFirstDateTime == NULL)  ||
+      (event_eventLastDateTime  == NULL)  ||
+      (event_eventInterval      == NULL)) return false;
+  if ((event_neverTriggerEvent   == NULL) ||
+      (event_triggerCurrentEvent == NULL) ||
+      (event_eventisFirstInDay   == NULL) ||
+      (event_eventisFirstInMonth == NULL) ||
+      (event_eventisFirstInYear  == NULL) ||
+      (event_eventisLastInDay    == NULL) ||
+      (event_eventisLastInMonth  == NULL) ||
+      (event_eventisLastInYear   == NULL) ||
+      (event_nextEventIsFirst    == NULL) ||
+      (event_lastEventWasFinal   == NULL)) return false;
+
+  if (*event_neverTriggerEvent) return false;
+
+  /* If event has been triggered for a datetime and checked once again
      return that state */
   if (*event_eventsLastEvaluationDateTime != NULL) {
     if (compareDatetime(current_dt, *event_eventsLastEvaluationDateTime) == equal_to)
@@ -811,7 +824,7 @@ isCurrentEventActiveRaw(bool               event_neverTriggerEvent,
   //++++++++ Events trigger [start-end]. Slack is ignored outside this range. ++++++++++//
 
   /* If current_dt is yet not in trigger range, Return on false. */
-  if (compareDatetime(current_dt, event_eventFirstDateTime) == less_than)  return false;
+  if (compareDatetime(current_dt, event_eventFirstDateTime) == less_than) return false;
 
   /* If last date is defined, check if current_dt is ahead of
      event->eventLastDateTime. Return on false. */
@@ -830,14 +843,14 @@ isCurrentEventActiveRaw(bool               event_neverTriggerEvent,
      event->triggerNextEventDateTime, we need to update the
      event->triggerNextEventDateTime to the next possible trigger time
      or else the events will never trigger. */
-  if (isTriggerTimeInRange(current_dt, event_triggerNextEventDateTime, plus_slack, NULL) == greater_than)
+  if (isTriggerTimeInRange(current_dt, *event_triggerNextEventDateTime, plus_slack, NULL) == greater_than)
     {
       /* Get the first trigger time and update. */
       struct _timedelta* modulo_td = newTimeDelta(initDummyTDString);
-      moduloTimeDeltaFromDateTime(event_triggerNextEventDateTime,
+      moduloTimeDeltaFromDateTime(*event_triggerNextEventDateTime,
                                   event_eventInterval,
                                   current_dt, modulo_td);
-      addTimeDeltaToDateTime(current_dt, modulo_td, event_triggerNextEventDateTime);
+      addTimeDeltaToDateTime(current_dt, modulo_td, *event_triggerNextEventDateTime);
       /* Cleanup. */
       deallocateTimeDelta(modulo_td);
     }
@@ -845,9 +858,7 @@ isCurrentEventActiveRaw(bool               event_neverTriggerEvent,
   /* Check if trigger time is now. Trigger allowed with a slack
      provided [start-end] condition is met. */
   if( !(*event_lastEventWasFinal) &&
-      (isTriggerTimeInRange(current_dt,
-                            event_triggerNextEventDateTime,
-                            plus_slack, minus_slack) == equal_to) )
+      (isTriggerTimeInRange(current_dt, *event_triggerNextEventDateTime, plus_slack, minus_slack) == equal_to) )
     {
       /* If current Datetime is equal to next trigger datetime, Event
          is active. */
@@ -858,22 +869,22 @@ isCurrentEventActiveRaw(bool               event_neverTriggerEvent,
          this event must be FirstIn* */
 
       if( (*event_nextEventIsFirst == true) ||
-          (iseventNextInNextDayRaw(event_triggerNextEventDateTime,
-                                   event_triggeredPreviousEventDateTime) == true))
+          (iseventNextInNextDayRaw(*event_triggerNextEventDateTime,
+                                   *event_triggeredPreviousEventDateTime) == true))
         *event_eventisFirstInDay = true;
 
       if( (*event_nextEventIsFirst == true)  ||
-          (iseventNextInNextMonthRaw(event_triggerNextEventDateTime,
-                                     event_triggeredPreviousEventDateTime) == true))
+          (iseventNextInNextMonthRaw(*event_triggerNextEventDateTime,
+                                     *event_triggeredPreviousEventDateTime) == true))
         *event_eventisFirstInMonth = true;
 
       if( (*event_nextEventIsFirst == true)  ||
-          (iseventNextInNextYearRaw(event_triggerNextEventDateTime,
-                                    event_triggeredPreviousEventDateTime) == true))
+          (iseventNextInNextYearRaw(*event_triggerNextEventDateTime,
+                                    *event_triggeredPreviousEventDateTime) == true))
         *event_eventisFirstInYear = true;
 
       /* Set previous-triggered-datetime to now. */
-      replaceDatetime(current_dt, event_triggeredPreviousEventDateTime);
+      replaceDatetime(current_dt, *event_triggeredPreviousEventDateTime);
 
       int cmp_val_flag = -128;
       struct _datetime* tmp_dt = newDateTime(initDummyDTString);
@@ -894,9 +905,9 @@ isCurrentEventActiveRaw(bool               event_neverTriggerEvent,
              )
            )
         {
-          addTimeDeltaToDateTime(event_triggerNextEventDateTime,
+          addTimeDeltaToDateTime(*event_triggerNextEventDateTime,
                                  event_eventInterval,
-                                 event_triggerNextEventDateTime);
+                                 *event_triggerNextEventDateTime);
         }
       else
         *event_lastEventWasFinal = true;
@@ -907,28 +918,30 @@ isCurrentEventActiveRaw(bool               event_neverTriggerEvent,
       *event_triggerCurrentEvent = true;
 
 
-      /* If the future event (not the current event being triggered) has a different day/month/year, current event must be LastIn*.
-         Notice that triggerNextEventDateTime is now the FUTURE event after the update above. */
+      /* If the future event (not the current event being triggered)
+         has a different day/month/year, current event must be
+         LastIn*.  Notice that triggerNextEventDateTime is now the
+         FUTURE event after the update above. */
       if (
           ( event_eventLastDateTime && (cmp_val_flag == greater_than) )
-          || (iseventNextInNextDayRaw(event_triggerNextEventDateTime,
-                                      event_triggeredPreviousEventDateTime) == true) )
+          || (iseventNextInNextDayRaw(*event_triggerNextEventDateTime,
+                                      *event_triggeredPreviousEventDateTime) == true) )
         {
           *event_eventisLastInDay = true;
         }
 
       if(
          ( event_eventLastDateTime  && (cmp_val_flag == greater_than) )
-         || (iseventNextInNextMonthRaw(event_triggerNextEventDateTime,
-                                       event_triggeredPreviousEventDateTime) == true))
+         || (iseventNextInNextMonthRaw(*event_triggerNextEventDateTime,
+                                       *event_triggeredPreviousEventDateTime) == true))
         {
           *event_eventisLastInMonth = true;
         }
 
       if (
           ( event_eventLastDateTime  && (cmp_val_flag == greater_than) )
-          || (iseventNextInNextYearRaw(event_triggerNextEventDateTime,
-                                       event_triggeredPreviousEventDateTime) == true))
+          || (iseventNextInNextYearRaw(*event_triggerNextEventDateTime,
+                                       *event_triggeredPreviousEventDateTime) == true))
         {
           *event_eventisLastInYear = true;
         }
@@ -941,10 +954,8 @@ isCurrentEventActiveRaw(bool               event_neverTriggerEvent,
 
       *event_eventsLastEvaluationDateTime =
         replaceDatetime(current_dt, *event_eventsLastEvaluationDateTime);
-
       return true;
     }
-
   return false;
 }
 
@@ -981,14 +992,14 @@ isCurrentEventActive(struct _event*     event,
                      struct _timedelta* plus_slack,
                      struct _timedelta* minus_slack)
 {
-  /* TODO: Check for event == NULL */
-  return isCurrentEventActiveRaw(event->neverTriggerEvent,
-                                 &event->eventsLastEvaluationDateTime,
+  if (event == NULL)  return false;
+  return isCurrentEventActiveRaw(current_dt,
                                  event->eventFirstDateTime,
                                  event->eventLastDateTime,
-                                 event->triggerNextEventDateTime,
                                  event->eventInterval,
-                                 event->triggeredPreviousEventDateTime,
+                                 plus_slack,
+                                 minus_slack,
+                                 &event->neverTriggerEvent,
                                  &event->triggerCurrentEvent,
                                  &event->eventisFirstInDay,
                                  &event->eventisFirstInMonth,
@@ -998,9 +1009,9 @@ isCurrentEventActive(struct _event*     event,
                                  &event->eventisLastInYear,
                                  &event->nextEventIsFirst,
                                  &event->lastEventWasFinal,
-                                 current_dt,
-                                 plus_slack,
-                                 minus_slack);
+                                 &event->triggerNextEventDateTime,
+                                 &event->eventsLastEvaluationDateTime,
+                                 &event->triggeredPreviousEventDateTime);
 }
 
 
@@ -1040,7 +1051,7 @@ iseventNextInNextDayRaw(struct _datetime* event_triggerNextEventDateTime,
 bool
 iseventNextInNextDay(struct _event* e)
 {
-  // TODO: Check if e not null
+  if (e == NULL)  return false;
   return iseventNextInNextDayRaw(e->triggerNextEventDateTime,
                                  e->triggeredPreviousEventDateTime);
 }
@@ -1084,7 +1095,7 @@ iseventNextInNextMonthRaw(struct _datetime* event_triggerNextEventDateTime,
 bool
 iseventNextInNextMonth(struct _event* e)
 {
-  // TODO: Check if e not null
+  if (e == NULL)  return false;
   return iseventNextInNextMonthRaw(e->triggerNextEventDateTime,
                                    e->triggeredPreviousEventDateTime);
 }
@@ -1131,7 +1142,7 @@ iseventNextInNextYearRaw(struct _datetime* event_triggerNextEventDateTime,
 bool
 iseventNextInNextYear(struct _event* e)
 {
-  // TODO: Check if e not null
+  if (e == NULL)  return false;
   return iseventNextInNextYearRaw(e->triggerNextEventDateTime,
                                   e->triggeredPreviousEventDateTime);
 }
-- 
GitLab