Files
LNXSDK/lib/haxejolt/JoltPhysics/Jolt/ObjectStream/ObjectStreamBinaryIn.cpp

253 lines
5.8 KiB
C++
Raw Normal View History

2026-03-04 00:50:15 -08:00
// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
// SPDX-FileCopyrightText: 2021 Jorrit Rouwe
// SPDX-License-Identifier: MIT
#include <Jolt/Jolt.h>
#ifdef JPH_OBJECT_STREAM
#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(Float4 &outPrimitive)
{
Float4 primitive;
mStream.read((char *)&primitive, sizeof(Float4));
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(UVec4 &outPrimitive)
{
UVec4 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
#endif // JPH_OBJECT_STREAM