19#ifndef DATA_PIECES_VALUE_H
20#define DATA_PIECES_VALUE_H
25#include "DataPieces.h"
39 !std::is_same<T, bool>::value,
40 "DataPieceValue does not support bool. Use vrs::Bool instead");
41 static_assert(std::is_trivially_copyable<T>::value,
"DataPieceValue only supports POD types.");
50 explicit DataPieceValue(
const MakerBundle& bundle);
55 return vrs::getTypeName<T>();
70 const T*
const ptr = layout_.
getFixedData<T>(offset_,
sizeof(T));
71 return ptr !=
nullptr ? readUnaligned<T>(ptr) :
getDefault();
76 bool get(T& outValue)
const {
77 const T*
const ptr = layout_.
getFixedData<T>(offset_,
sizeof(T));
79 outValue = readUnaligned<T>(ptr);
90 bool set(
const T& value) {
91 T*
const ptr = layout_.
getFixedData<T>(offset_,
sizeof(T));
93 writeUnaligned<T>(ptr, value);
102 return defaultValue_;
108 defaultValue_ = defaultValue;
121 auto iter = properties_.find(propertyName);
122 if (iter != properties_.end()) {
123 outValue = iter->second;
132 properties_[propertyName] = value;
212 return patchedPiece !=
nullptr && patchedPiece->
set(value);
218 return layout_.
getFixedData<T>(offset_,
sizeof(T)) !=
nullptr;
225 void print(ostream& out,
const string& indent)
const override;
230 void printCompact(ostream& out,
const string& indent)
const override;
246 unique_ptr<DataPiece>
clone()
const override {
247 auto other = std::make_unique<DataPieceValue<T>>(
getLabel());
248 other->tags_ = tags_;
249 other->required_ = required_;
250 other->properties_ = properties_;
251 other->defaultValue_ = defaultValue_;
259 bool retrieved = source->
get(value);
265 map<string, T> properties_;
282template <
typename EnumType,
typename StorageType>
291 :
DataPieceValue<StorageType>(label, static_cast<StorageType>(defaultValue)) {}
304 bool get(EnumType& e)
const {
307 e =
static_cast<EnumType
>(v);
314 bool set(
const EnumType e) {
330 outDefault =
static_cast<EnumType
>(v);
vector< int8_t > & getFixedData()
Definition DataLayout.h:237
T * getMappedPiece(size_t pieceIndex) const
Get a typed piece by index in the mapped datalayout, exclusively.
Definition DataLayout.h:505
DataPieceValue specialization class to store enums more conveniently and safely.
Definition DataPieceValue.h:283
bool get(EnumType &e) const
Definition DataPieceValue.h:304
DataPieceEnum(const string &label, EnumType defaultValue)
Definition DataPieceValue.h:290
EnumType get() const
Definition DataPieceValue.h:296
DataPieceEnum(const string &label)
Definition DataPieceValue.h:286
EnumType getDefault() const
Definition DataPieceValue.h:320
void setDefault(const EnumType defaultValue)
Definition DataPieceValue.h:336
bool set(const EnumType e)
Definition DataPieceValue.h:314
bool getDefault(EnumType &outDefault) const
Definition DataPieceValue.h:327
Abstract class representing a piece of information part of a DataLayout.
Definition DataPieces.h:40
static const string kMinIncrement
Special property name for the minimum increment of the DataPiece.
Definition DataPieces.h:63
static const string kMaxValue
Special property name for the maximum value of the DataPiece.
Definition DataPieces.h:61
static const string kMaxIncrement
Special property name for the maximum increment of the DataPiece.
Definition DataPieces.h:65
static const string kMinValue
Special property name for the minimum value of the DataPiece.
Definition DataPieces.h:59
const string & getLabel() const
Definition DataPieces.h:76
DataPiece for a single value of type T. The value is stored in DataLayout's fixed size buffer.
Definition DataPieceValue.h:37
void setRange(T min, T max)
Definition DataPieceValue.h:178
void setMaxIncrement(T maxIncrement)
Definition DataPieceValue.h:193
bool get(T &outValue) const
Definition DataPieceValue.h:76
void print(ostream &out, const string &indent) const override
Definition DataLayout.cpp:1240
bool isAvailable() const override
Definition DataPieceValue.h:217
bool getMin(T &outMin) const
Definition DataPieceValue.h:138
void serialize(JsonWrapper &jsonWrapper, const JsonFormatProfileSpec &profile) override
Definition DataLayout.cpp:1283
bool copyFrom(const DataPiece *original) override
Set or stage value from another piece known to be of the same type.
Definition DataPieceValue.h:256
size_t getVariableSize() const override
Definition DataPieceValue.h:59
bool set(const T &value)
Definition DataPieceValue.h:90
bool getProperty(const string &propertyName, T &outValue) const
Definition DataPieceValue.h:120
bool isSame(const DataPiece *rhs) const override
Definition DataLayout.cpp:1273
void setMinIncrement(T minIncrement)
Definition DataPieceValue.h:186
void printCompact(ostream &out, const string &indent) const override
Definition DataLayout.cpp:1264
bool getMaxIncrement(T &outMaxIncrement) const
Definition DataPieceValue.h:156
T get() const
Definition DataPieceValue.h:69
void setMax(T max)
Definition DataPieceValue.h:170
DataPieceValue(string label, T defaultValue={})
Definition DataPieceValue.h:46
void setProperty(const string &propertyName, T value)
Definition DataPieceValue.h:131
void setIncrement(T minIncrement, T maxIncrement)
Definition DataPieceValue.h:201
const string & getElementTypeName() const override
Definition DataPieceValue.h:54
void setDefault(const T &defaultValue)
Definition DataPieceValue.h:107
bool patchValue(T value) const
Definition DataPieceValue.h:210
void setMin(T min)
Definition DataPieceValue.h:163
unique_ptr< DataPiece > clone() const override
Definition DataPieceValue.h:246
bool getMax(T &outMax) const
Definition DataPieceValue.h:144
bool getMinIncrement(T &outMinIncrement) const
Definition DataPieceValue.h:150
const T & getDefault() const
Definition DataPieceValue.h:101
void initToDefault() override
Initialize to default value.
Definition DataPieceValue.h:112
size_t collectVariableData(int8_t *, size_t) override
Definition DataPieceValue.h:64
Definition AsyncDiskFileChunk.hpp:49
DataPieceType
Specifier for a type of DataPiece.
Definition DataLayout.h:57