/** * Creates a new iterator pointing to the first event in buffer * \param buffer The buffer to create an iterator for * \return The new iterator */ BufferIterator_t * BufferIterator_NewForward (Buffer_t *buffer) { BufferIterator_t *it = new_Iterator (buffer); ASSERT_VALID_ITERATOR(it); it->CurrentElement = Buffer_GetHead(buffer); return it; }
/** * Creates a new iterator pointing to the last event in buffer * \param buffer The buffer to create an iterator for * \return The new iterator */ BufferIterator_t * BufferIterator_NewBackward (Buffer_t *buffer) { int overflow; BufferIterator_t *it = new_Iterator (buffer); ASSERT_VALID_ITERATOR(it); it->CurrentElement = buffer->CurEvt; /* CurEvt points to the next event going to be written, so we have to rewind 1 position for the last valid event */ CIRCULAR_STEP (it->CurrentElement, -1, it->Buffer->FirstEvt, it->Buffer->LastEvt, &overflow); return it; }
BufferIterator_t * BufferIterator_NewRange (Buffer_t *buffer, unsigned long long start_time, unsigned long long end_time) { BufferIterator_t *itf, *itb, *itrange; int found_start_bound = FALSE, found_end_bound = FALSE; int count1 = 0, count2 = 0; itrange = new_Iterator(buffer); ASSERT_VALID_ITERATOR(itrange); itf = BIT_NewForward(buffer); itb = BIT_NewBackward(buffer); /* Search for the start boundary */ while ((!BIT_OutOfBounds(itf)) && (!found_start_bound)) { event_t *cur = BIT_GetEvent(itf); if (Get_EvTime(cur) >= start_time) { found_start_bound = TRUE; itrange->StartBound = cur; } count1++; BIT_Next(itf); } /* Search for the end boundary */ while ((!BIT_OutOfBounds(itb)) && (!found_end_bound)) { event_t *cur = BIT_GetEvent(itb); if (Get_EvTime(cur) <= end_time) { found_end_bound = TRUE; itrange->EndBound = cur; } count2++; BIT_Prev(itb); } itrange->CurrentElement = itrange->StartBound; itrange->OutOfBounds = !(found_start_bound && found_end_bound); return itrange; }
static METHOD knh__HashMap_opItr(Ctx *ctx, knh_sfp_t *sfp) { HashMap *o = (HashMap*)sfp[0].o; KNH_RETURN(ctx, sfp, new_Iterator(ctx, ctx->share->ClassTable[o->h.cid].p1, UP(o), knh_HashMap_var_next)); }
MAPPER knh_HashMap_Iterator(Ctx *ctx, knh_sfp_t *sfp) { HashMap *o = (HashMap*)sfp[0].o; KNH_MAPPED(ctx, sfp, new_Iterator(ctx, ctx->share->ClassTable[o->h.cid].p1, UP(o), knh_HashMap_var_next)); }