19#ifndef DATA_PIECES_VECTOR_H
20#define DATA_PIECES_VECTOR_H
25#include <vrs/DataPieces.h>
44 defaultValues_{std::move(defaultValues)} {}
47 explicit DataPieceVector(
const MakerBundle& bundle);
52 return vrs::getTypeName<T>();
57 return sizeof(T) * stagedValues_.size();
65 if (writtenSize > 0) {
83 void stage(
const vector<T>& values) {
84 stagedValues_ = values;
88 void stage(vector<T>&& values) {
89 stagedValues_ = std::move(values);
95 void stage(
const T* values,
size_t count) {
96 stagedValues_.resize(count);
98 unalignedCopy(stagedValues_.data(), values, count *
sizeof(T));
111 bool get(vector<T>& outValues)
const {
113 const T* ptr = layout_.
getVarData<T>(offset_, count);
114 if (ptr !=
nullptr && count > 0) {
115 outValues.resize(count);
123 outValues = defaultValues_;
134 std::enable_if_t<std::is_same<U, T>::value && std::is_trivially_copyable<U>::value,
int> = 0>
135 bool getRawData(
const void*& outData,
size_t& outCount)
const {
136 outData = layout_.
getVarData<T>(offset_, outCount);
137 if (outData !=
nullptr && outCount > 0) {
151 defaultValues_.resize(count);
153 unalignedCopy(defaultValues_.data(), defaultValues, count *
sizeof(T));
169 defaultValues_ = values;
176 defaultValues_ = std::move(values);
181 return defaultValues_;
185 stagedValues_ = defaultValues_;
194 return patchedPiece !=
nullptr && (patchedPiece->stage(values),
true);
201 return layout_.
getVarData<T>(offset_, count) !=
nullptr;
208 void print(ostream& out,
const string& indent)
const override;
213 void printCompact(ostream& out,
const string& indent)
const override;
235 unique_ptr<DataPiece>
clone()
const override {
236 auto other = std::make_unique<DataPieceVector<T>>(
getLabel());
237 other->tags_ = tags_;
238 other->required_ = required_;
239 other->defaultValues_ = defaultValues_;
246 return originalVect->
get(stagedValues_);
250 vector<T> stagedValues_;
251 vector<T> defaultValues_;
The DataLayout class describes the data stored inside a DataLayoutContentBlock.
Definition DataLayout.h:211
vector< int8_t > & getVarData()
Definition DataLayout.h:263
static const size_t kNotFound
Special OffsetAndLength offset value marking that a piece of data isn't available.
Definition DataLayout.h:225
T * getMappedPiece(size_t pieceIndex) const
Get a typed piece by index in the mapped datalayout, exclusively.
Definition DataLayout.h:526
Abstract class representing a piece of information part of a DataLayout.
Definition DataPieces.h:42
const string & getLabel() const
Definition DataPieces.h:78
Vector of type T and variable size.
Definition DataPieceVector.h:39
void initToDefault() override
Stage default value.
Definition DataPieceVector.h:184
bool isAvailable() const override
Definition DataPieceVector.h:199
void serialize(JsonWrapper &jsonWrapper, const JsonFormatProfileSpec &profile) override
Definition DataLayout.cpp:1593
const vector< T > & stagedValues() const
Definition DataPieceVector.h:73
void setDefault(vector< T > &&values)
Definition DataPieceVector.h:175
void stage(vector< T > &&values)
Definition DataPieceVector.h:88
void stage(const T(&arr)[n])
Definition DataPieceVector.h:104
size_t collectVariableData(int8_t *data, size_t bufferSize) override
Definition DataPieceVector.h:63
void setDefault(const vector< T > &values)
Definition DataPieceVector.h:168
unique_ptr< DataPiece > clone() const override
Definition DataPieceVector.h:235
const vector< T > & getDefault() const
Definition DataPieceVector.h:180
bool isSame(const DataPiece *rhs) const override
Definition DataLayout.cpp:1584
bool get(vector< T > &outValues) const
Definition DataPieceVector.h:111
void stage(const T *values, size_t count)
Definition DataPieceVector.h:95
void print(ostream &out, const string &indent) const override
Definition DataLayout.cpp:1470
void setDefault(const T(&arr)[n])
Definition DataPieceVector.h:161
bool patchValue(const vector< T > &values) const
Definition DataPieceVector.h:192
void setDefault(const T *defaultValues, size_t count)
Definition DataPieceVector.h:150
size_t getVariableSize() const override
Definition DataPieceVector.h:56
vector< T > & stagedValues()
Definition DataPieceVector.h:78
bool stageCurrentValue() override
Definition DataPieceVector.h:228
bool copyFrom(const DataPiece *original) override
Set or stage value from another piece known to be of the same type.
Definition DataPieceVector.h:244
const string & getElementTypeName() const override
Definition DataPieceVector.h:51
bool getRawData(const void *&outData, size_t &outCount) const
Definition DataPieceVector.h:135
DataPieceVector(string label, vector< T > defaultValues={})
Definition DataPieceVector.h:42
void stage(const vector< T > &values)
Definition DataPieceVector.h:83
void printCompact(ostream &out, const string &indent) const override
Definition DataLayout.cpp:1529
Definition Compressor.cpp:130
void unalignedCopy(void *dst, const void *src, size_t size)
ASAN can trip when pointers are not aligned, but pointing to larger types. Make asan happy.
Definition DataPieces.h:315
DataPieceType
Specifier for a type of DataPiece.
Definition DataLayout.h:59
@ Vector
Variable size array of T.