19#ifndef DATA_PIECES_VECTOR_H
20#define DATA_PIECES_VECTOR_H
23#include "DataPieces.h"
42 defaultValues_{std::move(defaultValues)} {}
45 explicit DataPieceVector(
const MakerBundle& bundle);
50 return vrs::getTypeName<T>();
55 return sizeof(T) * stagedValues_.size();
63 if (writtenSize > 0) {
64 memcpy(data, stagedValues_.data(), writtenSize);
81 void stage(
const vector<T>& values) {
82 stagedValues_ = values;
86 void stage(vector<T>&& values) {
87 stagedValues_ = std::move(values);
93 void stage(
const T* values,
size_t count) {
94 stagedValues_.resize(count);
96 memcpy(stagedValues_.data(), values, count *
sizeof(T));
109 bool get(vector<T>& outValues)
const {
111 const T* ptr = layout_.
getVarData<T>(offset_, count);
112 if (ptr !=
nullptr && count > 0) {
113 outValues.resize(count);
114 memcpy(outValues.data(), ptr, count *
sizeof(T));
117 outValues = defaultValues_;
124 return defaultValues_;
130 defaultValues_.resize(count);
132 memcpy(defaultValues_.data(), defaultValues, count *
sizeof(T));
144 defaultValues_ = values;
149 defaultValues_ = std::move(values);
154 stagedValues_ = defaultValues_;
163 return patchedPiece !=
nullptr && (patchedPiece->stage(values),
true);
170 return layout_.
getVarData<T>(offset_, count) !=
nullptr;
177 void print(ostream& out,
const string& indent)
const override;
182 void printCompact(ostream& out,
const string& indent)
const override;
204 unique_ptr<DataPiece>
clone()
const override {
205 auto other = std::make_unique<DataPieceVector<T>>(
getLabel());
206 other->tags_ = tags_;
207 other->required_ = required_;
208 other->defaultValues_ = defaultValues_;
215 return originalVect->
get(stagedValues_);
219 vector<T> stagedValues_;
220 vector<T> defaultValues_;
The DataLayout class describes the data stored inside a DataLayoutContentBlock.
Definition DataLayout.h:191
vector< int8_t > & getVarData()
Definition DataLayout.h:242
T * getMappedPiece(size_t pieceIndex) const
Get a typed piece by index in the mapped datalayout, exclusively.
Definition DataLayout.h:505
Abstract class representing a piece of information part of a DataLayout.
Definition DataPieces.h:40
const string & getLabel() const
Definition DataPieces.h:76
Vector of type T and variable size.
Definition DataPieceVector.h:37
void initToDefault() override
Initialize to default value.
Definition DataPieceVector.h:153
bool isAvailable() const override
Definition DataPieceVector.h:168
void serialize(JsonWrapper &jsonWrapper, const JsonFormatProfileSpec &profile) override
Definition DataLayout.cpp:1585
const vector< T > & stagedValues() const
Definition DataPieceVector.h:71
void setDefault(vector< T > &&values)
Definition DataPieceVector.h:148
void stage(vector< T > &&values)
Definition DataPieceVector.h:86
void stage(const T(&arr)[n])
Definition DataPieceVector.h:102
size_t collectVariableData(int8_t *data, size_t bufferSize) override
Definition DataPieceVector.h:61
void setDefault(const vector< T > &values)
Definition DataPieceVector.h:143
unique_ptr< DataPiece > clone() const override
Definition DataPieceVector.h:204
const vector< T > & getDefault() const
Definition DataPieceVector.h:123
bool isSame(const DataPiece *rhs) const override
Definition DataLayout.cpp:1576
bool get(vector< T > &outValues) const
Definition DataPieceVector.h:109
void stage(const T *values, size_t count)
Definition DataPieceVector.h:93
void print(ostream &out, const string &indent) const override
Definition DataLayout.cpp:1468
void setDefault(const T(&arr)[n])
Definition DataPieceVector.h:138
bool patchValue(const vector< T > &values) const
Definition DataPieceVector.h:161
void setDefault(const T *defaultValues, size_t count)
Definition DataPieceVector.h:129
size_t getVariableSize() const override
Definition DataPieceVector.h:54
vector< T > & stagedValues()
Definition DataPieceVector.h:76
bool stageCurrentValue() override
Definition DataPieceVector.h:197
bool copyFrom(const DataPiece *original) override
Set or stage value from another piece known to be of the same type.
Definition DataPieceVector.h:213
const string & getElementTypeName() const override
Definition DataPieceVector.h:49
DataPieceVector(string label, vector< T > defaultValues={})
Definition DataPieceVector.h:40
void stage(const vector< T > &values)
Definition DataPieceVector.h:81
void printCompact(ostream &out, const string &indent) const override
Definition DataLayout.cpp:1521
Definition AsyncDiskFileChunk.hpp:49
DataPieceType
Specifier for a type of DataPiece.
Definition DataLayout.h:57
@ Vector
Variable size array of T.