123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- // Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
- // SPDX-FileCopyrightText: 2021 Jorrit Rouwe
- // SPDX-License-Identifier: MIT
- #include <Jolt/Jolt.h>
- #include <Jolt/ObjectStream/ObjectStreamBinaryIn.h>
- JPH_NAMESPACE_BEGIN
- ObjectStreamBinaryIn::ObjectStreamBinaryIn(istream &inStream) :
- ObjectStreamIn(inStream)
- {
- }
- bool ObjectStreamBinaryIn::ReadDataType(EOSDataType &outType)
- {
- uint32 type;
- mStream.read((char *)&type, sizeof(type));
- if (mStream.fail()) return false;
- outType = (EOSDataType)type;
- return true;
- }
- bool ObjectStreamBinaryIn::ReadName(String &outName)
- {
- return ReadPrimitiveData(outName);
- }
- bool ObjectStreamBinaryIn::ReadIdentifier(Identifier &outIdentifier)
- {
- Identifier id;
- mStream.read((char *)&id, sizeof(id));
- if (mStream.fail()) return false;
- outIdentifier = id;
- return true;
- }
- bool ObjectStreamBinaryIn::ReadCount(uint32 &outCount)
- {
- uint32 count;
- mStream.read((char *)&count, sizeof(count));
- if (mStream.fail()) return false;
- outCount = count;
- return true;
- }
- bool ObjectStreamBinaryIn::ReadPrimitiveData(uint8 &outPrimitive)
- {
- uint8 primitive;
- mStream.read((char *)&primitive, sizeof(primitive));
- if (mStream.fail()) return false;
- outPrimitive = primitive;
- return true;
- }
- bool ObjectStreamBinaryIn::ReadPrimitiveData(uint16 &outPrimitive)
- {
- uint16 primitive;
- mStream.read((char *)&primitive, sizeof(primitive));
- if (mStream.fail()) return false;
- outPrimitive = primitive;
- return true;
- }
- bool ObjectStreamBinaryIn::ReadPrimitiveData(int &outPrimitive)
- {
- int primitive;
- mStream.read((char *)&primitive, sizeof(primitive));
- if (mStream.fail()) return false;
- outPrimitive = primitive;
- return true;
- }
- bool ObjectStreamBinaryIn::ReadPrimitiveData(uint32 &outPrimitive)
- {
- uint32 primitive;
- mStream.read((char *)&primitive, sizeof(primitive));
- if (mStream.fail()) return false;
- outPrimitive = primitive;
- return true;
- }
- bool ObjectStreamBinaryIn::ReadPrimitiveData(uint64 &outPrimitive)
- {
- uint64 primitive;
- mStream.read((char *)&primitive, sizeof(primitive));
- if (mStream.fail()) return false;
- outPrimitive = primitive;
- return true;
- }
- bool ObjectStreamBinaryIn::ReadPrimitiveData(float &outPrimitive)
- {
- float primitive;
- mStream.read((char *)&primitive, sizeof(primitive));
- if (mStream.fail()) return false;
- outPrimitive = primitive;
- return true;
- }
- bool ObjectStreamBinaryIn::ReadPrimitiveData(double &outPrimitive)
- {
- double primitive;
- mStream.read((char *)&primitive, sizeof(primitive));
- if (mStream.fail()) return false;
- outPrimitive = primitive;
- return true;
- }
- bool ObjectStreamBinaryIn::ReadPrimitiveData(bool &outPrimitive)
- {
- bool primitive;
- mStream.read((char *)&primitive, sizeof(primitive));
- if (mStream.fail()) return false;
- outPrimitive = primitive;
- return true;
- }
- bool ObjectStreamBinaryIn::ReadPrimitiveData(String &outPrimitive)
- {
- // Read length or ID of string
- uint32 len;
- if (!ReadPrimitiveData(len))
- return false;
- // Check empty string
- if (len == 0)
- {
- outPrimitive.clear();
- return true;
- }
- // Check if it is an ID in the string table
- if (len & 0x80000000)
- {
- StringTable::iterator i = mStringTable.find(len);
- if (i == mStringTable.end())
- return false;
- outPrimitive = i->second;
- return true;
- }
- // Read the string
- char *data = (char *)JPH_STACK_ALLOC(len + 1);
- mStream.read(data, len);
- if (mStream.fail()) return false;
- data[len] = 0;
- outPrimitive = data;
- // Insert string in table
- mStringTable.try_emplace(mNextStringID, outPrimitive);
- mNextStringID++;
- return true;
- }
- bool ObjectStreamBinaryIn::ReadPrimitiveData(Float3 &outPrimitive)
- {
- Float3 primitive;
- mStream.read((char *)&primitive, sizeof(Float3));
- if (mStream.fail()) return false;
- outPrimitive = primitive;
- return true;
- }
- bool ObjectStreamBinaryIn::ReadPrimitiveData(Double3 &outPrimitive)
- {
- Double3 primitive;
- mStream.read((char *)&primitive, sizeof(Double3));
- if (mStream.fail()) return false;
- outPrimitive = primitive;
- return true;
- }
- bool ObjectStreamBinaryIn::ReadPrimitiveData(Vec3 &outPrimitive)
- {
- Float3 primitive;
- mStream.read((char *)&primitive, sizeof(Float3));
- if (mStream.fail()) return false;
- outPrimitive = Vec3(primitive); // Use Float3 constructor so that we initialize W too
- return true;
- }
- bool ObjectStreamBinaryIn::ReadPrimitiveData(DVec3 &outPrimitive)
- {
- Double3 primitive;
- mStream.read((char *)&primitive, sizeof(Double3));
- if (mStream.fail()) return false;
- outPrimitive = DVec3(primitive); // Use Float3 constructor so that we initialize W too
- return true;
- }
- bool ObjectStreamBinaryIn::ReadPrimitiveData(Vec4 &outPrimitive)
- {
- Vec4 primitive;
- mStream.read((char *)&primitive, sizeof(primitive));
- if (mStream.fail()) return false;
- outPrimitive = primitive;
- return true;
- }
- bool ObjectStreamBinaryIn::ReadPrimitiveData(Quat &outPrimitive)
- {
- Quat primitive;
- mStream.read((char *)&primitive, sizeof(primitive));
- if (mStream.fail()) return false;
- outPrimitive = primitive;
- return true;
- }
- bool ObjectStreamBinaryIn::ReadPrimitiveData(Mat44 &outPrimitive)
- {
- Mat44 primitive;
- mStream.read((char *)&primitive, sizeof(primitive));
- if (mStream.fail()) return false;
- outPrimitive = primitive;
- return true;
- }
- bool ObjectStreamBinaryIn::ReadPrimitiveData(DMat44 &outPrimitive)
- {
- Vec4 c0, c1, c2;
- DVec3 c3;
- if (!ReadPrimitiveData(c0) || !ReadPrimitiveData(c1) || !ReadPrimitiveData(c2) || !ReadPrimitiveData(c3))
- return false;
- outPrimitive = DMat44(c0, c1, c2, c3);
- return true;
- }
- JPH_NAMESPACE_END
|