From 29a5331ba5e1c9ff3e079f7f3bed9ea2cd915c8c Mon Sep 17 00:00:00 2001 From: Lang Hames Date: Tue, 7 Oct 2025 12:43:51 +1100 Subject: [PATCH] [orc-rt] Add SPS serialization support for size_t. Serialize size_ts to uint64_t. --- .../orc-rt/SimplePackedSerialization.h | 22 +++++++++++++++++++ .../SimplePackedSerializationTest.cpp | 5 +++++ 2 files changed, 27 insertions(+) diff --git a/orc-rt/include/orc-rt/SimplePackedSerialization.h b/orc-rt/include/orc-rt/SimplePackedSerialization.h index 7ac1cf2367dca..f60ccad666ab1 100644 --- a/orc-rt/include/orc-rt/SimplePackedSerialization.h +++ b/orc-rt/include/orc-rt/SimplePackedSerialization.h @@ -172,6 +172,28 @@ class SPSSerializationTraits< } }; +class SPSSize; + +/// SPSSize is serializable to/from size_t. Wire size is 64-bits. +template <> class SPSSerializationTraits { +public: + static size_t size(const size_t &Value) { + return SPSArgList::size(static_cast(Value)); + } + static bool serialize(SPSOutputBuffer &OB, const size_t &Value) { + return SPSArgList::serialize(OB, static_cast(Value)); + } + static bool deserialize(SPSInputBuffer &IB, size_t &Value) { + uint64_t Tmp; + if (!SPSArgList::deserialize(IB, Tmp)) + return false; + if (Tmp > std::numeric_limits::max()) + return false; + Value = Tmp; + return true; + } +}; + /// Any empty placeholder suitable as a substitute for void when deserializing class SPSEmpty {}; diff --git a/orc-rt/unittests/SimplePackedSerializationTest.cpp b/orc-rt/unittests/SimplePackedSerializationTest.cpp index 8b4a8d2f64d56..c3df499da510f 100644 --- a/orc-rt/unittests/SimplePackedSerializationTest.cpp +++ b/orc-rt/unittests/SimplePackedSerializationTest.cpp @@ -103,6 +103,11 @@ TEST(SimplePackedSerializationTest, UInt64Serialization) { testFixedIntegralTypeSerialization(); } +TEST(SimplePackedSerializationTest, SizeTSerialization) { + size_t V = 42; + blobSerializationRoundTrip(V); +} + TEST(SimplePackedSerializationTest, SequenceSerialization) { std::vector V({1, 2, -47, 139}); blobSerializationRoundTrip, std::vector>(V);