/**
 * 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;
}
Exemple #4
0
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));
}
Exemple #5
0
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));
}