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