示例#1
0
文件: Siren.cpp 项目: fjz13/Medusa
	MemoryData Serialize(const SirenObject& obj, const ISirenType& type, SirenCoderType coder/*=SirenCoderType::Compact*/)
	{
		switch (coder)
		{
		case SirenCoderType::Compact:
		{
			MemoryStream stream;
			SirenCompactBinaryWriter writer(stream);
			SirenObjectSerializer serializer(writer);
			if (serializer.Serialize(obj, type))
			{
				return stream.CurrentBuffer();
			}
			return MemoryData::Empty;
		}
		case SirenCoderType::Fast:
		{
			MemoryStream stream;
			SirenFastBinaryWriter writer(stream);
			SirenObjectSerializer serializer(writer);
			if (serializer.Serialize(obj, type))
			{
				return stream.CurrentBuffer();
			}

			return MemoryData::Empty;
		}
		case SirenCoderType::Json:
		{
			MemoryStream stream;
			SirenJsonWriter writer(stream);
			SirenObjectSerializer serializer(writer);
			if (serializer.Serialize(obj, type))
			{
				return stream.CurrentBuffer();
			}

			return MemoryData::Empty;
		}
#ifdef MEDUSA_SQL
		case SirenCoderType::SqlText:
		{
			MemoryStream stream;
			SirenSqlTextWriter writer(stream);
			SirenObjectSerializer serializer(writer);
			if (serializer.Serialize(obj, type))
			{
				return stream.CurrentBuffer();
			}

			return MemoryData::Empty;
		}
#endif

		}

		return MemoryData::Empty;
	}
示例#2
0
const IStream* FileStorage::ReadFileHelper(const FileEntry& file, FileDataType dataType /*= FileDataType::Binary*/) const
{
	const IStream* resultStream = OnReadFile(file, dataType);
	RETURN_NULL_IF_NULL(resultStream);

	const CoderChain* coderChain = GetFileCoderChain(file);
	if (coderChain != nullptr)
	{
		if (IsWholeFileCoding())
		{
			MemoryStream* tempStream = new MemoryStream(file.OriginalSize(), false);
			coderChain->Decode(*resultStream, *tempStream);
			const auto data = tempStream->CurrentBuffer();
			SAFE_DELETE(tempStream);
			MemoryStream* outputStream = new MemoryStream(data);
			resultStream = outputStream;
		}
		else
		{
			resultStream = new BlockCodeReadStream(*resultStream, BlockSize(), *coderChain, file);
		}
	}

	return resultStream;
}