9 Commits

Author SHA1 Message Date
b4674bd94c Fixed Serializer::WriteStr.
All checks were successful
Build & Release / Linux-AMD64-Build (push) Successful in 1m24s
Build & Release / Windows-AMD64-Build (push) Successful in 8h1m32s
Build & Release / Linux-AARCH64-Build (push) Successful in 3m22s
2024-02-17 00:57:33 -08:00
1fd9c63cfe Removed a param from Serializer::WriteStr. 2024-02-17 00:54:14 -08:00
7cdd57cc5f Fixed Serializer::ReadStr. 2024-02-17 00:52:03 -08:00
b1adf15f89 Added param for Serializer::WriteStr. 2024-02-17 00:48:14 -08:00
8e88412deb Fixed error in Serializer::WriteStr. 2024-02-17 00:42:24 -08:00
7a79fa4d76 Fixed error in Serializer::WritePAdding. 2024-02-17 00:30:08 -08:00
d3c1e81a27 Optimized write calls in Serializer. 2024-02-17 00:27:54 -08:00
54065f6ce3 Adjusted strings in Serializer. 2024-02-17 00:17:31 -08:00
d394ca8445 Backup. 2024-02-14 00:11:47 -08:00
2 changed files with 152 additions and 66 deletions

View File

@@ -194,8 +194,7 @@ namespace ehs
Byte* r = new Byte[this->size + remainder];
for (N i = 0; i < this->size; ++i)
r[i] = data[i];
Util::Copy(r, data, size);
delete[] data;
data = r;
@@ -265,8 +264,7 @@ namespace ehs
Byte* r = new Byte[size + remainder];
for (N i = 0; i < size; ++i)
r[i] = data[i];
Util::Copy(r, data, size);
delete[] data;
data = r;
@@ -336,8 +334,7 @@ namespace ehs
Byte* r = new Byte[size + remainder];
for (N i = 0; i < size; ++i)
r[i] = data[i];
Util::Copy(r, data, size);
delete[] data;
data = r;
@@ -398,17 +395,87 @@ namespace ehs
offset += sizeof(T) * value.Size();
}
template<typename T, typename O = UInt_64>
void WriteStr(const T* str, N inSize = 0)
{
bool sizeKnown = inSize;
if (!sizeKnown)
while (str[inSize])
inSize++;
N bSize = sizeof(T) * inSize;
N bSizeN = bSize;
if (!sizeKnown)
bSizeN += sizeof(T);
if (bSizeN > size - offset)
{
N remainder = bSizeN - (size - offset);
Byte* r = new Byte[size + remainder];
Util::Copy(r, data, size);
delete[] data;
data = r;
size += remainder;
}
if (CPU::GetEndianness() == Endianness::LE)
{
if (endianness == Endianness::LE)
{
Util::Copy(&data[offset], &str[0], bSize);
if (!sizeKnown)
*(T*)&data[offset + inSize] = 0;
}
else
{
for (N i = 0; i < inSize; ++i)
for (N b = 0; b < sizeof(T); ++b)
data[offset + sizeof(T) * i + b] = ((Byte*)&str[i])[sizeof(T) - i - 1];
if (!sizeKnown)
*(T*)&data[offset + bSize] = 0;
}
}
else
{
if (endianness == Endianness::LE)
{
for (N i = 0; i < inSize; ++i)
for (N b = 0; b < sizeof(T); ++b)
data[offset + sizeof(T) * i + b] = ((Byte*)&str[i])[sizeof(T) - i - 1];
if (!sizeKnown)
*(T*)&data[offset + bSize] = 0;
}
else
{
Util::Copy(&data[offset], &str[0], bSize);
if (!sizeKnown)
*(T*)&data[offset + bSize] = 0;
}
}
offset += bSizeN;
}
template<typename T, typename O = UInt_64>
void WriteStr(const Str<T, O>& str)
{
if (sizeof(N) + sizeof(T) * str.Size() > size - offset)
N inSize = sizeof(T) * (str.Size() + 1);
if (inSize > size - offset)
{
N remainder = sizeof(N) + sizeof(T) * str.Size() - (size - offset);
N remainder = inSize - (size - offset);
Byte* r = new Byte[size + remainder];
for (N i = 0; i < size; ++i)
r[i] = data[i];
Util::Copy(r, data, size);
delete[] data;
data = r;
@@ -419,54 +486,38 @@ namespace ehs
{
if (endianness == Endianness::LE)
{
*(N*)&data[offset] = (N)str.Size();
Util::Copy(&data[offset], &str[0], str.Size(true));
offset += sizeof(N);
for (N i = 0; i < str.Size(); ++i)
*(T*)&data[offset + i * sizeof(T)] = str[i];
*(T*)&data[offset + str.Size(true)] = 0;
}
else
{
N tmpSize = (N)str.Size();
for (N i = 0; i < sizeof(N); ++i)
data[offset + i] = ((Byte*)&tmpSize)[sizeof(N) - i - 1];
offset += sizeof(N);
for (N i = 0; i < str.Size(); ++i)
for (N b = 0; b < sizeof(T); ++b)
data[offset + i * sizeof(T) + b] = ((Byte*)&str[i])[sizeof(T) - i - 1];
data[offset + sizeof(T) * i + b] = ((Byte*)&str[i])[sizeof(T) - i - 1];
*(T*)&data[offset + str.Size(true)] = 0;
}
}
else
{
if (endianness == Endianness::LE)
{
N tmpSize = (N)str.Size();
for (N i = 0; i < sizeof(N); ++i)
data[offset + i] = ((Byte*)&tmpSize)[sizeof(N) - i - 1];
offset += sizeof(N);
for (N i = 0; i < str.Size(); ++i)
for (N b = 0; b < sizeof(T); ++b)
data[offset + i * sizeof(T) + b] = ((Byte*)&str[i])[sizeof(T) - i - 1];
data[offset + sizeof(T) * i + b] = ((Byte*)&str[i])[sizeof(T) - i - 1];
*(T*)&data[offset + str.Size(true)] = 0;
}
else
{
*(N*)&data[offset] = (N)str.Size();
Util::Copy(&data[offset], &str[0], str.Size(true));
offset += sizeof(N);
for (N i = 0; i < str.Size(); ++i)
*(T*)&data[offset + i * sizeof(T)] = str[i];
*(T*)&data[offset + str.Size(true)] = 0;
}
}
offset += str.Size() * sizeof(T);
offset += inSize;
}
void WriteVersion(const Version& value)
@@ -477,8 +528,7 @@ namespace ehs
Byte* r = new Byte[size + remainder];
for (N i = 0; i < size; ++i)
r[i] = data[i];
Util::Copy(r, data, size);
delete[] data;
data = r;
@@ -518,8 +568,7 @@ namespace ehs
Byte* r = new Byte[size + remainder];
for (N i = 0; i < size; ++i)
r[i] = data[i];
Util::Copy(r, data, size);
delete[] data;
data = r;
@@ -559,8 +608,7 @@ namespace ehs
Byte* r = new Byte[size + remainder];
for (N i = 0; i < size; ++i)
r[i] = data[i];
Util::Copy(r, data, size);
delete[] data;
data = r;
@@ -599,8 +647,7 @@ namespace ehs
Byte* r = new Byte[size + remainder];
for (N i = 0; i < size; ++i)
r[i] = data[i];
Util::Copy(r, data, size);
delete[] data;
data = r;
@@ -640,8 +687,7 @@ namespace ehs
Byte* r = new Byte[size + remainder];
for (N i = 0; i < size; ++i)
r[i] = data[i];
Util::Copy(r, data, size);
delete[] data;
data = r;
@@ -681,8 +727,7 @@ namespace ehs
Byte* r = new Byte[size + remainder];
for (N i = 0; i < size; ++i)
r[i] = data[i];
Util::Copy(r, data, size);
delete[] data;
data = r;
@@ -721,8 +766,7 @@ namespace ehs
Byte* r = new Byte[size + remainder];
for (N i = 0; i < size; ++i)
r[i] = data[i];
Util::Copy(r, data, size);
delete[] data;
data = r;
@@ -762,8 +806,7 @@ namespace ehs
Byte* r = new Byte[size + remainder];
for (N i = 0; i < size; ++i)
r[i] = data[i];
Util::Copy(r, data, size);
delete[] data;
data = r;
@@ -803,8 +846,7 @@ namespace ehs
Byte* r = new Byte[size + remainder];
for (N i = 0; i < size; ++i)
r[i] = data[i];
Util::Copy(r, data, size);
delete[] data;
data = r;
@@ -844,8 +886,7 @@ namespace ehs
Byte* r = new Byte[size + remainder];
for (N i = 0; i < size; ++i)
r[i] = data[i];
Util::Copy(r, data, size);
delete[] data;
data = r;
@@ -885,8 +926,7 @@ namespace ehs
Byte* r = new Byte[size + remainder];
for (N i = 0; i < size; ++i)
r[i] = data[i];
Util::Copy(r, data, size);
delete[] data;
data = r;
@@ -944,6 +984,26 @@ namespace ehs
offset += ser.Size();
}
void WritePadding(const N size)
{
if (size > this->size - offset)
{
N remainder = size - (this->size - offset);
Byte* r = new Byte[this->size + remainder];
Util::Copy(r, data, this->size);
delete[] data;
data = r;
this->size += remainder;
}
Util::Zero(&data[offset], size);
offset += size;
}
template<typename T>
void Write(const T value)
{
@@ -953,8 +1013,7 @@ namespace ehs
Byte* r = new Byte[size + remainder];
for (N i = 0; i < size; ++i)
r[i] = data[i];
Util::Copy(r, data, size);
delete[] data;
data = r;
@@ -1014,12 +1073,39 @@ namespace ehs
}
template<typename T, typename O>
Str<T, O> ReadStr(const O size = 0)
Str<T, O> ReadStr(O size = 0)
{
Str<T, O> result(size ? size : (O)Read<N>());
bool sizeKnown = size;
for (O i = 0; i < result.Size(); ++i)
result[i] = Read<T>();
if (!sizeKnown)
while (&data[offset + sizeof(T) * size])
size++;
Str<T, O> result(size);
if (CPU::GetEndianness() == Endianness::LE)
{
if (endianness == Endianness::LE)
Util::Copy(&result[0], &data[offset], result.Size(true));
else
for (N i = 0; i < size; ++i)
for (N b = 0; b < sizeof(T); ++b)
((Byte*)&result[i])[sizeof(T) - i - 1] = data[offset + sizeof(T) * i + b];
}
else
{
if (endianness == Endianness::LE)
for (N i = 0; i < size; ++i)
for (N b = 0; b < sizeof(T); ++b)
((Byte*)&result[i])[sizeof(T) - i - 1] = data[offset + sizeof(T) * i + b];
else
Util::Copy(&result[0], &data[offset], result.Size(true));
}
offset += result.Size(true);
if (!sizeKnown)
offset++;
return result;
}

View File

@@ -1,4 +1,4 @@
#include "io/Window_Way.h"
#include "ehs/io/Window_Way.h"
namespace ehs
{