Skip to content

Commit e706a30

Browse files
authored
[orc-rt] Add SPS serialization support for size_t. (#162214)
Serialize size_ts to uint64_t.
1 parent 08078fb commit e706a30

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

orc-rt/include/orc-rt/SimplePackedSerialization.h

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,28 @@ class SPSSerializationTraits<
172172
}
173173
};
174174

175+
class SPSSize;
176+
177+
/// SPSSize is serializable to/from size_t. Wire size is 64-bits.
178+
template <> class SPSSerializationTraits<SPSSize, size_t> {
179+
public:
180+
static size_t size(const size_t &Value) {
181+
return SPSArgList<uint64_t>::size(static_cast<uint64_t>(Value));
182+
}
183+
static bool serialize(SPSOutputBuffer &OB, const size_t &Value) {
184+
return SPSArgList<uint64_t>::serialize(OB, static_cast<uint64_t>(Value));
185+
}
186+
static bool deserialize(SPSInputBuffer &IB, size_t &Value) {
187+
uint64_t Tmp;
188+
if (!SPSArgList<uint64_t>::deserialize(IB, Tmp))
189+
return false;
190+
if (Tmp > std::numeric_limits<size_t>::max())
191+
return false;
192+
Value = Tmp;
193+
return true;
194+
}
195+
};
196+
175197
/// Any empty placeholder suitable as a substitute for void when deserializing
176198
class SPSEmpty {};
177199

orc-rt/unittests/SimplePackedSerializationTest.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,11 @@ TEST(SimplePackedSerializationTest, UInt64Serialization) {
103103
testFixedIntegralTypeSerialization<uint64_t>();
104104
}
105105

106+
TEST(SimplePackedSerializationTest, SizeTSerialization) {
107+
size_t V = 42;
108+
blobSerializationRoundTrip<SPSSize, size_t>(V);
109+
}
110+
106111
TEST(SimplePackedSerializationTest, SequenceSerialization) {
107112
std::vector<int32_t> V({1, 2, -47, 139});
108113
blobSerializationRoundTrip<SPSSequence<int32_t>, std::vector<int32_t>>(V);

0 commit comments

Comments
 (0)