File indexing completed on 2025-07-14 09:00:35
0001 #ifndef PODIO_COLLECTIONBUFFERS_H
0002 #define PODIO_COLLECTIONBUFFERS_H
0003
0004 #include "podio/ObjectID.h"
0005 #include "podio/SchemaEvolution.h"
0006
0007 #include <functional>
0008 #include <memory>
0009 #include <string>
0010 #include <string_view>
0011 #include <utility>
0012 #include <vector>
0013
0014 namespace podio {
0015
0016 class CollectionBase;
0017
0018 template <typename T>
0019 using UVecPtr = std::unique_ptr<std::vector<T>>;
0020
0021 using CollRefCollection = std::vector<UVecPtr<podio::ObjectID>>;
0022 using VectorMembersInfo = std::vector<std::pair<std::string, void*>>;
0023
0024
0025
0026 struct CollectionWriteBuffers {
0027 void* data{nullptr};
0028 void* vecPtr{nullptr};
0029 CollRefCollection* references{nullptr};
0030 VectorMembersInfo* vectorMembers{nullptr};
0031
0032 template <typename DataT>
0033 std::vector<DataT>* dataAsVector() {
0034 return asVector<DataT>(data);
0035 }
0036
0037 template <typename T>
0038 static std::vector<T>* asVector(void* raw) {
0039
0040 return *static_cast<std::vector<T>**>(raw);
0041 }
0042 };
0043
0044 struct CollectionReadBuffers {
0045 void* data{nullptr};
0046 CollRefCollection* references{nullptr};
0047 VectorMembersInfo* vectorMembers{nullptr};
0048 SchemaVersionT schemaVersion{0};
0049 std::string_view type{};
0050
0051 using CreateFuncT = std::function<std::unique_ptr<podio::CollectionBase>(podio::CollectionReadBuffers, bool)>;
0052 using RecastFuncT = std::function<void(CollectionReadBuffers&)>;
0053
0054 using DeleteFuncT = std::function<void(CollectionReadBuffers&)>;
0055
0056 CollectionReadBuffers(void* d, CollRefCollection* ref, VectorMembersInfo* vec, SchemaVersionT version,
0057 std::string_view typ, CreateFuncT&& createFunc, RecastFuncT&& recastFunc,
0058 DeleteFuncT&& deleteFunc) :
0059 data(d),
0060 references(ref),
0061 vectorMembers(vec),
0062 schemaVersion(version),
0063 type(typ),
0064 createCollection(std::move(createFunc)),
0065 recast(std::move(recastFunc)),
0066 deleteBuffers(std::move(deleteFunc)) {
0067 }
0068
0069 CollectionReadBuffers() = default;
0070 CollectionReadBuffers(const CollectionReadBuffers&) = default;
0071 CollectionReadBuffers& operator=(const CollectionReadBuffers&) = default;
0072
0073 CollectionReadBuffers(CollectionWriteBuffers buffers) :
0074 data(buffers.data), references(buffers.references), vectorMembers(buffers.vectorMembers) {
0075 }
0076
0077 template <typename DataT>
0078 std::vector<DataT>* dataAsVector() {
0079 return asVector<DataT>(data);
0080 }
0081
0082 template <typename T>
0083 static std::vector<T>* asVector(void* raw) {
0084
0085 return static_cast<std::vector<T>*>(raw);
0086 }
0087
0088 CreateFuncT createCollection{};
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109 RecastFuncT recast{};
0110
0111
0112
0113
0114 DeleteFuncT deleteBuffers{};
0115 };
0116
0117 }
0118
0119 #endif