Skip to content

Commit 8b0ceb2

Browse files
authored
Merge pull request #21 from cisco/paulej_encoding_length
Allow one to check required buffer size for encoding
2 parents 45ad0e2 + e726533 commit 8b0ceb2

File tree

9 files changed

+179
-99
lines changed

9 files changed

+179
-99
lines changed

include/data_buffer.h

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -66,16 +66,7 @@ namespace gs
6666
*/
6767
class DataBufferException : public std::runtime_error
6868
{
69-
public:
70-
explicit DataBufferException(const std::string &what_arg) :
71-
std::runtime_error(what_arg)
72-
{
73-
}
74-
75-
explicit DataBufferException(const char *what_arg) :
76-
std::runtime_error(what_arg)
77-
{
78-
}
69+
using std::runtime_error::runtime_error;
7970
};
8071

8172
// DataBuffer object declaration

include/gs_decoder.h

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -60,16 +60,7 @@ namespace gs
6060
// DecoderException exception definition
6161
class DecoderException : public std::runtime_error
6262
{
63-
public:
64-
explicit DecoderException(const std::string &what_arg) :
65-
std::runtime_error(what_arg)
66-
{
67-
}
68-
69-
explicit DecoderException(const char *what_arg) :
70-
std::runtime_error(what_arg)
71-
{
72-
}
63+
using std::runtime_error::runtime_error;
7364
};
7465

7566
// Game State Decoder object

include/gs_deserializer.h

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -67,16 +67,7 @@ namespace gs
6767
// DeserializerException exception definition
6868
class DeserializerException : public std::runtime_error
6969
{
70-
public:
71-
explicit DeserializerException(const std::string &what_arg) :
72-
std::runtime_error(what_arg)
73-
{
74-
}
75-
76-
explicit DeserializerException(const char *what_arg) :
77-
std::runtime_error(what_arg)
78-
{
79-
}
70+
using std::runtime_error::runtime_error;
8071
};
8172

8273
// Game State Deserializer object

include/gs_encoder.h

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -66,16 +66,7 @@ namespace gs
6666
// EncoderException exception definition
6767
class EncoderException : public std::runtime_error
6868
{
69-
public:
70-
explicit EncoderException(const std::string &what_arg) :
71-
std::runtime_error(what_arg)
72-
{
73-
}
74-
75-
explicit EncoderException(const char *what_arg) :
76-
std::runtime_error(what_arg)
77-
{
78-
}
69+
using std::runtime_error::runtime_error;
7970
};
8071

8172
// Return result from Encode() calls, which is a count of objects and
@@ -105,6 +96,13 @@ class Encoder
10596
EncodeResult Encode(DataBuffer &data_buffer,
10697
const UnknownObject &value);
10798

99+
// Determine the required buffer length to encode objects
100+
template <typename T>
101+
EncodeResult GetEncodeLength(const T &value)
102+
{
103+
return Encode(null_buffer, value);
104+
}
105+
108106
// Ensure no implicit conversions calling Encode
109107
template <typename T>
110108
EncodeResult Encode(DataBuffer &data_buffer, const T &value) = delete;

include/gs_serializer.h

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -71,16 +71,7 @@ namespace gs
7171
// SerializerException exception definition
7272
class SerializerException : public std::runtime_error
7373
{
74-
public:
75-
explicit SerializerException(const std::string &what_arg) :
76-
std::runtime_error(what_arg)
77-
{
78-
}
79-
80-
explicit SerializerException(const char *what_arg) :
81-
std::runtime_error(what_arg)
82-
{
83-
}
74+
using std::runtime_error::runtime_error;
8475
};
8576

8677
// Game State Serializer object

src/gs_api_internal.cpp

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -413,8 +413,8 @@ int GSSerializeObject(GS_Encoder_Context_Internal &context,
413413
if (object.parent_present) object1.parent = gs::ObjectID{object.parent};
414414

415415
// Serialize the object
416-
auto [object_count,
417-
octet_count] = context.encoder.Encode(context.data_buffer, object1);
416+
auto [object_count, octet_count] =
417+
context.encoder.Encode(context.data_buffer, object1);
418418

419419
return static_cast<int>(object_count);
420420
}
@@ -453,8 +453,8 @@ int GSSerializeObject(GS_Encoder_Context_Internal &context,
453453
if (object.ipd_present) head1.ipd = gs::HeadIPD1{object.ipd.ipd};
454454

455455
// Serialize the object
456-
auto [object_count,
457-
octet_count] = context.encoder.Encode(context.data_buffer, head1);
456+
auto [object_count, octet_count] =
457+
context.encoder.Encode(context.data_buffer, head1);
458458

459459
return static_cast<int>(object_count);
460460
}
@@ -493,8 +493,8 @@ int GSSerializeObject(GS_Encoder_Context_Internal &context,
493493
SerializeCopy(object.rotation, hand1.rotation);
494494

495495
// Serialize the object
496-
auto [object_count,
497-
octet_count] = context.encoder.Encode(context.data_buffer, hand1);
496+
auto [object_count, octet_count] =
497+
context.encoder.Encode(context.data_buffer, hand1);
498498

499499
return static_cast<int>(object_count);
500500
}
@@ -555,8 +555,8 @@ int GSSerializeObject(GS_Encoder_Context_Internal &context,
555555
}
556556

557557
// Serialize the object
558-
auto [object_count,
559-
octet_count] = context.encoder.Encode(context.data_buffer, mesh1);
558+
auto [object_count, octet_count] =
559+
context.encoder.Encode(context.data_buffer, mesh1);
560560

561561
return static_cast<int>(object_count);
562562
}
@@ -601,8 +601,8 @@ int GSSerializeObject(GS_Encoder_Context_Internal &context,
601601
SerializeCopy(object.pinky, hand2.pinky);
602602

603603
// Serialize the object
604-
auto [object_count,
605-
octet_count] = context.encoder.Encode(context.data_buffer, hand2);
604+
auto [object_count, octet_count] =
605+
context.encoder.Encode(context.data_buffer, hand2);
606606

607607
return static_cast<int>(object_count);
608608
}
@@ -640,8 +640,8 @@ int GSSerializeObject(GS_Encoder_Context_Internal &context,
640640
object.data + object.data_length);
641641

642642
// Serialize the object
643-
auto [object_count,
644-
octet_count] = context.encoder.Encode(context.data_buffer, unknown);
643+
auto [object_count, octet_count] =
644+
context.encoder.Encode(context.data_buffer, unknown);
645645

646646
return static_cast<int>(object_count);
647647
}
@@ -676,8 +676,8 @@ int GSSerializeObject(GS_Encoder_Context_Internal &context,
676676
head_ipd1.ipd.value = object.ipd;
677677

678678
// Serialize the object
679-
auto [object_count,
680-
octet_count] = context.encoder.Encode(context.data_buffer, head_ipd1);
679+
auto [object_count, octet_count] =
680+
context.encoder.Encode(context.data_buffer, head_ipd1);
681681

682682
return static_cast<int>(object_count);
683683
}

0 commit comments

Comments
 (0)