VRS
A file format for sensor data.
Loading...
Searching...
No Matches
DataReference.h
1/*
2 * Copyright (c) Meta Platforms, Inc. and affiliates.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#pragma once
18
19#include <cstdint>
20
21#include <vector>
22
23#include <vrs/VrsExport.h>
24
25namespace vrs {
26
27using std::vector;
28
29class FileHandler;
30
61class VRS_API DataReference {
62 public:
67 explicit DataReference(
68 void* data1 = nullptr,
69 uint32_t size1 = 0,
70 void* data2 = nullptr,
71 uint32_t size2 = 0)
72 : data1_(data1), size1_(size1), data2_(data2), size2_(size2) {}
73
77 template <class T>
78 explicit DataReference(vector<T>& vectorT, void* data = nullptr, uint32_t size = 0)
80 vectorT.data(),
81 static_cast<uint32_t>(sizeof(T) * vectorT.size()),
82 data,
83 size) {}
84
87 template <class T, class U>
88 DataReference(vector<T>& vectorT, vector<U>& vectorU)
90 vectorT.data(),
91 static_cast<uint32_t>(sizeof(T) * vectorT.size()),
92 vectorU.data(),
93 static_cast<uint32_t>(sizeof(U) * vectorU.size())) {}
94
97 template <class T, class U>
98 DataReference(T& object, vector<U>& vectorU)
100 &object,
101 sizeof(T),
102 vectorU.data(),
103 static_cast<uint32_t>(sizeof(U) * vectorU.size())) {}
104
108 template <class T>
109 explicit DataReference(T& object, void* data = nullptr, uint32_t size = 0)
110 : DataReference(&object, sizeof(T), data, size) {}
111
116 void useRawData(void* data1, uint32_t size1, void* data2 = nullptr, uint32_t size2 = 0);
117
121 template <class T>
122 void useVector(vector<T>& vectorT, void* data = nullptr, uint32_t size = 0) {
123 data1_ = vectorT.data();
124 size1_ = static_cast<uint32_t>(sizeof(T) * vectorT.size());
125 data2_ = data;
126 size2_ = size;
127 }
128
132 template <class T>
133 void useObject(T& object, void* data = nullptr, uint32_t size = 0) {
134 data1_ = &object;
135 size1_ = sizeof(T);
136 data2_ = data;
137 size2_ = size;
138 }
139
142 template <class T, class U>
143 void useVectors(vector<T>& vectorT, vector<U>& vectorU) {
144 data1_ = vectorT.data();
145 size1_ = static_cast<uint32_t>(sizeof(T) * vectorT.size());
146 data2_ = vectorU.data();
147 size2_ = static_cast<uint32_t>(sizeof(U) * vectorU.size());
148 }
149
152 template <class T, class U>
153 void useObjects(T& object1, U& object2) {
154 data1_ = &object1;
155 size1_ = sizeof(T);
156 data2_ = &object2;
157 size2_ = sizeof(U);
158 }
159
161 uint32_t getSize() const {
162 return size1_ + size2_;
163 }
164
168 void copyTo(void* destination) const;
169
176 int readFrom(FileHandler& file, uint32_t& outReadSize);
177
180 void* getDataPtr1() const {
181 return data1_;
182 }
185 uint32_t getDataSize1() const {
186 return size1_;
187 }
190 void* getDataPtr2() const {
191 return data2_;
192 }
195 uint32_t getDataSize2() const {
196 return size2_;
197 }
198
199 private:
200 void* data1_{};
201 uint32_t size1_{};
202 void* data2_{};
203 uint32_t size2_{};
204};
205
206} // namespace vrs
Container of data pointers, to tell where to write data when reading a record.
Definition DataReference.h:61
DataReference(vector< T > &vectorT, vector< U > &vectorU)
Definition DataReference.h:88
void useObject(T &object, void *data=nullptr, uint32_t size=0)
Definition DataReference.h:133
void useVectors(vector< T > &vectorT, vector< U > &vectorU)
Definition DataReference.h:143
void useObjects(T &object1, U &object2)
Definition DataReference.h:153
void * getDataPtr2() const
Definition DataReference.h:190
DataReference(T &object, void *data=nullptr, uint32_t size=0)
Definition DataReference.h:109
DataReference(T &object, vector< U > &vectorU)
Definition DataReference.h:98
uint32_t getDataSize1() const
Definition DataReference.h:185
uint32_t getSize() const
Definition DataReference.h:161
void * getDataPtr1() const
Definition DataReference.h:180
uint32_t getDataSize2() const
Definition DataReference.h:195
void useVector(vector< T > &vectorT, void *data=nullptr, uint32_t size=0)
Definition DataReference.h:122
DataReference(void *data1=nullptr, uint32_t size1=0, void *data2=nullptr, uint32_t size2=0)
Definition DataReference.h:67
DataReference(vector< T > &vectorT, void *data=nullptr, uint32_t size=0)
Definition DataReference.h:78
Class to abstract VRS file system operations, to enable support for alternate storage methods,...
Definition FileHandler.h:75
Definition Compressor.cpp:113