//+--------------------------------------------------------------------------+
//|				From PFOperatorMaterialStaticState::IPFActionState				 |
//+--------------------------------------------------------------------------+
IOResult PFOperatorMaterialStaticState::Save(ISave* isave) const
{
	ULONG nb;
	IOResult res;

	isave->BeginChunk(IPFActionState::kChunkActionHandle);
	ULONG handle = actionHandle();
	if ((res = isave->Write(&handle, sizeof(ULONG), &nb)) != IO_OK) return res;
	isave->EndChunk();

	isave->BeginChunk(IPFActionState::kChunkRandGen);
	if ((res = isave->Write(randGen(), sizeof(RandGenerator), &nb)) != IO_OK) return res;
	isave->EndChunk();

	isave->BeginChunk(IPFActionState::kChunkData);
	float offset = cycleOffset();
	if ((res = isave->Write(&offset, sizeof(float), &nb)) != IO_OK) return res;
	isave->EndChunk();

	isave->BeginChunk(IPFActionState::kChunkData2);
	TimeValue time = offsetTime();
	if ((res = isave->Write(&time, sizeof(TimeValue), &nb)) != IO_OK) return res;
	isave->EndChunk();

	return IO_OK;
}
//+--------------------------------------------------------------------------+
//|				From PFTestSplitByAmountState::IPFActionState				 |
//+--------------------------------------------------------------------------+
IOResult PFTestSplitByAmountState::Save(ISave* isave) const
{
	ULONG nb;
	IOResult res;

	isave->BeginChunk(IPFActionState::kChunkActionHandle);
	ULONG handle = actionHandle();
	if ((res = isave->Write(&handle, sizeof(ULONG), &nb)) != IO_OK) return res;
	isave->EndChunk();

	isave->BeginChunk(IPFActionState::kChunkRandGen);
	if ((res = isave->Write(randGen(), sizeof(RandGenerator), &nb)) != IO_OK) return res;
	isave->EndChunk();

	isave->BeginChunk(IPFActionState::kChunkData);
	int wT = wentThru();
	if ((res = isave->Write(&wT, sizeof(int), &nb)) != IO_OK) return res;
	isave->EndChunk();

	isave->BeginChunk(IPFActionState::kChunkData2);
	int wTA = wentThruAccum();
	if ((res = isave->Write(&wTA, sizeof(int), &nb)) != IO_OK) return res;
	isave->EndChunk();

	isave->BeginChunk(IPFActionState::kChunkData3);
	int wTT = wentThruTotal();
	if ((res = isave->Write(&wTT, sizeof(int), &nb)) != IO_OK) return res;
	isave->EndChunk();

	return IO_OK;
}
//+--------------------------------------------------------------------------+
//|				From PFOperatorMaterialFrequencyState::IPFActionState				 |
//+--------------------------------------------------------------------------+
IOResult PFOperatorMaterialFrequencyState::Save(ISave* isave) const
{
	ULONG nb;
	IOResult res;

	isave->BeginChunk(IPFActionState::kChunkActionHandle);
	ULONG handle = actionHandle();
	if ((res = isave->Write(&handle, sizeof(ULONG), &nb)) != IO_OK) return res;
	isave->EndChunk();

	isave->BeginChunk(IPFActionState::kChunkRandGen);
	if ((res = isave->Write(randGen(), sizeof(RandGenerator), &nb)) != IO_OK) return res;
	isave->EndChunk();

	return IO_OK;
}