123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- // SPDX-FileCopyrightText: 2021 Jorrit Rouwe
- // SPDX-License-Identifier: MIT
- #include <Jolt/Jolt.h>
- #include <Jolt/ObjectStream/ObjectStreamBinaryOut.h>
- #include <Jolt/Core/StringTools.h>
- JPH_NAMESPACE_BEGIN
- ObjectStreamBinaryOut::ObjectStreamBinaryOut(ostream &inStream) :
- ObjectStreamOut(inStream)
- {
- String header;
- header = StringFormat("BOS%2d.%02d", ObjectStream::sVersion, ObjectStream::sRevision);
- mStream.write(header.c_str(), header.size());
- }
- void ObjectStreamBinaryOut::WriteDataType(EOSDataType inType)
- {
- mStream.write((const char *)&inType, sizeof(inType));
- }
- void ObjectStreamBinaryOut::WriteName(const char *inName)
- {
- WritePrimitiveData(String(inName));
- }
- void ObjectStreamBinaryOut::WriteIdentifier(Identifier inIdentifier)
- {
- mStream.write((const char *)&inIdentifier, sizeof(inIdentifier));
- }
- void ObjectStreamBinaryOut::WriteCount(uint32 inCount)
- {
- mStream.write((const char *)&inCount, sizeof(inCount));
- }
- void ObjectStreamBinaryOut::WritePrimitiveData(const uint8 &inPrimitive)
- {
- mStream.write((const char *)&inPrimitive, sizeof(inPrimitive));
- }
- void ObjectStreamBinaryOut::WritePrimitiveData(const uint16 &inPrimitive)
- {
- mStream.write((const char *)&inPrimitive, sizeof(inPrimitive));
- }
- void ObjectStreamBinaryOut::WritePrimitiveData(const int &inPrimitive)
- {
- mStream.write((const char *)&inPrimitive, sizeof(inPrimitive));
- }
- void ObjectStreamBinaryOut::WritePrimitiveData(const uint32 &inPrimitive)
- {
- mStream.write((const char *)&inPrimitive, sizeof(inPrimitive));
- }
- void ObjectStreamBinaryOut::WritePrimitiveData(const uint64 &inPrimitive)
- {
- mStream.write((const char *)&inPrimitive, sizeof(inPrimitive));
- }
- void ObjectStreamBinaryOut::WritePrimitiveData(const float &inPrimitive)
- {
- mStream.write((const char *)&inPrimitive, sizeof(inPrimitive));
- }
- void ObjectStreamBinaryOut::WritePrimitiveData(const bool &inPrimitive)
- {
- mStream.write((const char *)&inPrimitive, sizeof(inPrimitive));
- }
- void ObjectStreamBinaryOut::WritePrimitiveData(const String &inPrimitive)
- {
- // Empty strings are trivial
- if (inPrimitive.empty())
- {
- WritePrimitiveData((uint32)0);
- return;
- }
- // Check if we've already written this string
- StringTable::iterator i = mStringTable.find(inPrimitive);
- if (i != mStringTable.end())
- {
- WritePrimitiveData(i->second);
- return;
- }
- // Insert string in table
- mStringTable.try_emplace(inPrimitive, mNextStringID);
- mNextStringID++;
- // Write string
- uint32 len = min((uint32)inPrimitive.size(), (uint32)0x7fffffff);
- WritePrimitiveData(len);
- mStream.write(inPrimitive.c_str(), len);
- }
- void ObjectStreamBinaryOut::WritePrimitiveData(const Float3 &inPrimitive)
- {
- mStream.write((const char *)&inPrimitive, sizeof(Float3));
- }
- void ObjectStreamBinaryOut::WritePrimitiveData(const Vec3 &inPrimitive)
- {
- mStream.write((const char *)&inPrimitive, 3 * sizeof(float));
- }
- void ObjectStreamBinaryOut::WritePrimitiveData(const Vec4 &inPrimitive)
- {
- mStream.write((const char *)&inPrimitive, sizeof(inPrimitive));
- }
- void ObjectStreamBinaryOut::WritePrimitiveData(const Quat &inPrimitive)
- {
- mStream.write((const char *)&inPrimitive, sizeof(inPrimitive));
- }
- void ObjectStreamBinaryOut::WritePrimitiveData(const Mat44 &inPrimitive)
- {
- mStream.write((const char *)&inPrimitive, sizeof(inPrimitive));
- }
- JPH_NAMESPACE_END
|