bool JackEngine::Process(jack_time_t cur_cycle_begin, jack_time_t prev_cycle_end) { bool res = true; // Cycle begin fEngineControl->CycleBegin(fClientTable, fGraphManager, cur_cycle_begin, prev_cycle_end); // Graph if (fGraphManager->IsFinishedGraph()) { ProcessNext(cur_cycle_begin); res = true; } else { jack_log("Process: graph not finished!"); if (cur_cycle_begin > fLastSwitchUsecs + fEngineControl->fTimeOutUsecs) { jack_log("Process: switch to next state delta = %ld", long(cur_cycle_begin - fLastSwitchUsecs)); ProcessNext(cur_cycle_begin); res = true; } else { jack_log("Process: waiting to switch delta = %ld", long(cur_cycle_begin - fLastSwitchUsecs)); ProcessCurrent(cur_cycle_begin); res = false; } } // Cycle end fEngineControl->CycleEnd(fClientTable); return res; }
void StarTriad3TEdgeCounter<EdgeData>::Count(const TVec<EdgeData>& events, const TIntV& timestamps, double delta) { InitializeCounters(); if (events.Len() != timestamps.Len()) { TExcept::Throw("Number of events must match number of timestamps."); } int start = 0; int end = 0; int L = timestamps.Len(); for (int j = 0; j < L; j++) { double tj = double(timestamps[j]); // Adjust counts in pre-window [tj - delta, tj) while (start < L && double(timestamps[start]) < tj - delta) { PopPre(events[start]); start++; } // Adjust counts in post-window (tj, tj + delta] while (end < L && double(timestamps[end]) <= tj + delta) { PushPos(events[end]); end++; } // Move current event off post-window PopPos(events[j]); ProcessCurrent(events[j]); PushPre(events[j]); } }