Ejemplo n.º 1
0
StateAutoConnector* IState::Update(void* sender, float dt)
{
	for (auto connector : mBeforeConnectors)
	{
		if (connector->Evaluate(sender))
		{
			return connector;
		}
	}

	RETURN_NULL_IF_TRUE(OnUpdate(sender, dt));

	for (auto connector : mAfterConnectors)
	{
		if (connector->Evaluate(sender))
		{
			return connector;
		}
	}

	return nullptr;
}
Ejemplo n.º 2
0
IStream* FileStorage::WriteFile(const StringRef& path, DirectoryEntry* parent /*= nullptr*/, FileOpenMode openMode /*= FileOpenMode::DestoryWriteOrCreate*/, FileDataType dataType /*= FileDataType::Binary*/)
{
	RETURN_NULL_IF_TRUE(IsReadOnly());

	FileEntry* fileEntry = FindFile(path, parent);
	CoderList coders = GetFileCoders(*fileEntry);
	if (fileEntry == nullptr)
	{
		//not exists
		switch (openMode)
		{
		case FileOpenMode::ReadOnly:
		case FileOpenMode::ReadWrite:
			return nullptr;
		case FileOpenMode::DestoryWriteOrCreate:
			//create file to only write
			break;
		case FileOpenMode::DestoryReadWriteOrCreate:
		case FileOpenMode::AppendReadWriteClearEOFOrCreate:
		case FileOpenMode::AppendWriteKeepEOFOrCreate:
			if (coders != 0)
			{
				Log::AssertFailedFormat("Not support read & write file with coder:{}", coders);
				return nullptr;
			}
			////create file to read write
			break;
		default:
			break;
		}

		fileEntry = FindOrCreateFileEntry(path, parent);
		IStream* stream = WriteFileHelper(*fileEntry, openMode, dataType);
		if (stream == nullptr)
		{
			RemoveFile(fileEntry);	//remove back file
		}
		return stream;

	}
	else
	{
		//exists
		switch (openMode)
		{
		case FileOpenMode::ReadOnly:
			break;
		case FileOpenMode::ReadWrite:
			if (fileEntry->IsReadonly())
			{
				Log::AssertFailedFormat("Cannot read & write readonly file:{}", path);
				return nullptr;
			}

			if (coders != 0)
			{
				Log::AssertFailedFormat("Not support read & write file with coder:{}", coders);
				return nullptr;
			}
			break;
		case FileOpenMode::DestoryWriteOrCreate:
			//use new attribute

			break;
		case FileOpenMode::AppendWriteKeepEOFOrCreate:
			if (coders != 0)
			{
				Log::AssertFailedFormat("Cannot append & write readonly file:{}", path);
				return nullptr;
			}

			break;
		case FileOpenMode::DestoryReadWriteOrCreate:
			RETURN_NULL_IF_TRUE(IsReadOnly());
			if (coders != 0)
			{
				Log::AssertFailedFormat("Not support read & write file with coder:{}", coders);
				return nullptr;
			}
			break;
		case FileOpenMode::AppendReadWriteClearEOFOrCreate:
			if (fileEntry->IsReadonly())
			{
				Log::AssertFailedFormat("Cannot read & write readonly file:{}", path);
				return nullptr;
			}

			if (GetFileCoders(*fileEntry))
			{
				Log::AssertFailedFormat("Not support read & write file with coder:{}", coders);
				return nullptr;
			}
			break;
		default:
			break;
		}

		IStream* stream = WriteFileHelper(*fileEntry, openMode, dataType);
		RETURN_NULL_IF_NULL(stream);

		return stream;
	}
}