Beispiel #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");
}
Beispiel #2
0
void DataStream_SequenceBase::PerformActionL(DataStream::DatastreamAction action, uint32 arg1, uint32 arg2)
{
	switch(action)
	{
	case DataStream::KResetRead:
	case DataStream::KResetRecord:
		{
			step = 0;
			current_item = NULL;
			
			DataStream *item = First();
			
			while(item)
			{
				item->PerformActionL(action,arg1, arg2);
				item = item->Suc();
			}
		}
		break;
	case DataStream::KFinishedAdding:
		{
			DataStream *item = First();
			
			while(item)
			{
				if(item->GetEnabledRecord() && !item->Finished())
					item->PerformActionL(DataStream::KFinishedAdding);
				item = item->Suc();
			}
		}
		break;
	case  DataStream::KWriteAction:
		if(arg2 == (uint32) DataStream_SequenceBase::STRUCTURE_START)
		{
			DataStream *item = First();
			while(item)
			{
				item->PerformActionL(DataStream::KWriteAction, 0, (uint32) DataStream_SequenceBase::STRUCTURE_START);
				item = item->Suc();
			}
		}
		break;
	}
	DataStream::PerformActionL(action, arg1, arg2);
}
Beispiel #3
0
void DataStream_SequenceBase::Debug_Write_All_Data()
{
	DS_DEBUG_Start();
	DS_Debug_Printf0("DataStream_BaseRecord::Debug_Write_All_Data Starting dump\n");
	DataStream *item = First();

	while(item)
	{
		DS_Debug_Printf0("--------- Start item -------\n");
		item->Debug_Write_All_Data();
		DS_Debug_Printf0("--------- End item   -------\n");
		item = item->Suc();
	}
	DS_Debug_Printf0("DataStream_BaseRecord::Debug_Write_All_Data Ending dump\n");
}
Beispiel #4
0
uint32	DataStream_SequenceBase::GetAttribute(DataStream::DatastreamUIntAttribute attr)
{
	switch(attr)
	{
	case DataStream::KFinished:
		return !current_item; // Also returns finsihed on non-started items
	case DataStream::KCalculateLength:
		{
			uint32 len = 0;
			
			DataStream *item = First();
			while(item)
			{
				if(item->GetEnabledRecord())
					len += item->CalculateLength();
				item = item->Suc();
			}
		
			return len;
		}
	}
	
	return DataStream::GetAttribute(attr);
}