Пример #1
0
void DataStream_SequenceBase::WriteRecordSequenceL(DataStream *target, BOOL start_after, DataStream *start_with_this, DataStream *stop_after_this)
{
	DS_DEBUG_Start();
	OP_ASSERT(target != this);

	int stepw = 0;
	DataStream *item = First();

	DS_Debug_Printf0("------------ Starting to Write Record ------------\n");
	if(start_with_this)
	{
		// Fast Forward
		while(item)
		{
			if(item == start_with_this && !start_after)
				break;

			if(item == stop_after_this)
				return;

			item = item->Suc();
			stepw++;

			if(item && start_with_this == item->Pred())
				break;
		}
	}

	WriteActionL(stepw++, (item && item->Pred() ? item->Pred()->GetItemID() : (uint32) DataStream_SequenceBase::STRUCTURE_START));
	while(item)
	{
		if(item->GetEnabledRecord())
			item->WriteRecordL(GetOutputTarget(target));

		WriteActionL(stepw++, item->GetItemID());

		BOOL is_last_element = (item == stop_after_this ? TRUE : FALSE);

		item = item->Suc();

		if(item && is_last_element)
		{
			DS_Debug_Printf0("------------ Finished Writing Record (1) ------------\n");
			return;
		}
	}
	WriteActionL(stepw++, DataStream_SequenceBase::STRUCTURE_FINISHED);

	DS_Debug_Printf0("------------ Finished Writing Record ------------\n");
}