|
19 | 19 | #include <ROOT/RLogger.hxx> |
20 | 20 | #include <ROOT/RNTupleDescriptor.hxx> |
21 | 21 | #include <ROOT/RNTupleModel.hxx> |
| 22 | +#include <ROOT/RNTupleUtil.hxx> |
22 | 23 | #include <ROOT/RNTupleZip.hxx> |
23 | 24 | #include <ROOT/RPage.hxx> |
24 | 25 | #include <ROOT/RPageAllocator.hxx> |
@@ -72,6 +73,38 @@ static constexpr daos_obj_id_t kOidFooter{std::uint64_t(-3), 0}; |
72 | 73 | //////////////////////////////////////////////////////////////////////////////// |
73 | 74 |
|
74 | 75 |
|
| 76 | +std::uint32_t |
| 77 | +ROOT::Experimental::Detail::RDaosNTupleAnchor::Serialize(void *buffer) const |
| 78 | +{ |
| 79 | + using namespace ROOT::Experimental::Internal::RNTupleSerialization; |
| 80 | + if (buffer != nullptr) { |
| 81 | + auto bytes = reinterpret_cast<unsigned char *>(buffer); |
| 82 | + bytes += SerializeUInt32(fVersion, bytes); |
| 83 | + bytes += SerializeUInt32(fNBytesHeader, bytes); |
| 84 | + bytes += SerializeUInt32(fLenHeader, bytes); |
| 85 | + bytes += SerializeUInt32(fNBytesFooter, bytes); |
| 86 | + bytes += SerializeUInt32(fLenFooter, bytes); |
| 87 | + } |
| 88 | + return 20; |
| 89 | +} |
| 90 | + |
| 91 | +std::uint32_t |
| 92 | +ROOT::Experimental::Detail::RDaosNTupleAnchor::Deserialize(const void *buffer) |
| 93 | +{ |
| 94 | + using namespace ROOT::Experimental::Internal::RNTupleSerialization; |
| 95 | + auto bytes = reinterpret_cast<const unsigned char *>(buffer); |
| 96 | + bytes += DeserializeUInt32(bytes, &fVersion); |
| 97 | + bytes += DeserializeUInt32(bytes, &fNBytesHeader); |
| 98 | + bytes += DeserializeUInt32(bytes, &fLenHeader); |
| 99 | + bytes += DeserializeUInt32(bytes, &fNBytesFooter); |
| 100 | + bytes += DeserializeUInt32(bytes, &fLenFooter); |
| 101 | + return 20; |
| 102 | +} |
| 103 | + |
| 104 | + |
| 105 | +//////////////////////////////////////////////////////////////////////////////// |
| 106 | + |
| 107 | + |
75 | 108 | ROOT::Experimental::Detail::RPageSinkDaos::RPageSinkDaos(std::string_view ntupleName, std::string_view uri, |
76 | 109 | const RNTupleWriteOptions &options) |
77 | 110 | : RPageSink(ntupleName, options) |
@@ -177,8 +210,10 @@ void ROOT::Experimental::Detail::RPageSinkDaos::WriteNTupleFooter( |
177 | 210 | } |
178 | 211 |
|
179 | 212 | void ROOT::Experimental::Detail::RPageSinkDaos::WriteNTupleAnchor() { |
180 | | - fDaosContainer->WriteObject(kOidAnchor, &fNTupleAnchor, sizeof(fNTupleAnchor), |
181 | | - kDistributionKey, kAttributeKey); |
| 213 | + const auto ntplSize = RDaosNTupleAnchor::GetSize(); |
| 214 | + auto buffer = std::make_unique<unsigned char[]>(ntplSize); |
| 215 | + fNTupleAnchor.Serialize(buffer.get()); |
| 216 | + fDaosContainer->WriteObject(kOidAnchor, buffer.get(), ntplSize, kDistributionKey, kAttributeKey); |
182 | 217 | } |
183 | 218 |
|
184 | 219 | ROOT::Experimental::Detail::RPage |
@@ -257,9 +292,12 @@ ROOT::Experimental::RNTupleDescriptor ROOT::Experimental::Detail::RPageSourceDao |
257 | 292 | { |
258 | 293 | RNTupleDescriptorBuilder descBuilder; |
259 | 294 | RDaosNTupleAnchor ntpl; |
260 | | - fDaosContainer->ReadObject(kOidAnchor, &ntpl, sizeof(ntpl), kDistributionKey, kAttributeKey); |
| 295 | + const auto ntplSize = RDaosNTupleAnchor::GetSize(); |
| 296 | + auto buffer = std::make_unique<unsigned char[]>(ntplSize); |
| 297 | + fDaosContainer->ReadObject(kOidAnchor, buffer.get(), ntplSize, kDistributionKey, kAttributeKey); |
| 298 | + ntpl.Deserialize(buffer.get()); |
261 | 299 |
|
262 | | - auto buffer = std::make_unique<unsigned char[]>(ntpl.fLenHeader); |
| 300 | + buffer = std::make_unique<unsigned char[]>(ntpl.fLenHeader); |
263 | 301 | auto zipBuffer = std::make_unique<unsigned char[]>(ntpl.fNBytesHeader); |
264 | 302 | fDaosContainer->ReadObject(kOidHeader, zipBuffer.get(), ntpl.fNBytesHeader, kDistributionKey, kAttributeKey); |
265 | 303 | fDecompressor->Unzip(zipBuffer.get(), ntpl.fNBytesHeader, ntpl.fLenHeader, buffer.get()); |
|
0 commit comments