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.");
51 defaultValue_ = std::make_unique<T>(defaultValue);
60 return vrs::getTypeName<T>();
75 const T*
const ptr = layout_.
getFixedData<T>(offset_,
sizeof(T));
76 return ptr !=
nullptr ? readUnaligned<T>(ptr) :
getDefault();
81 bool get(T& outValue)
const {
82 const T*
const ptr = layout_.
getFixedData<T>(offset_,
sizeof(T));
84 outValue = readUnaligned<T>(ptr);
95 bool set(
const T& value) {
96 T*
const ptr = layout_.
getFixedData<T>(offset_,
sizeof(T));
98 writeUnaligned<T>(ptr, value);
107 return defaultValue_ ? *defaultValue_.get() : T{};
114 outDefault = *defaultValue_.get();
125 *defaultValue_.get() = defaultValue;
127 defaultValue_ = std::make_unique<T>(defaultValue);
136 auto iter = properties_.find(propertyName);
137 if (iter != properties_.end()) {
138 outValue = iter->second;
147 properties_[propertyName] = value;
224 return layout_.
getFixedData<T>(offset_,
sizeof(T)) !=
nullptr;
231 void print(ostream& out,
const string& indent)
const override;
236 void printCompact(ostream& out,
const string& indent)
const override;
252 unique_ptr<DataPiece>
clone()
const override {
253 auto other = std::make_unique<DataPieceValue<T>>(
getLabel());
254 other->tags_ = tags_;
255 other->required_ = required_;
256 other->properties_ = properties_;
258 other->defaultValue_ = std::make_unique<T>(*defaultValue_);
269 map<string, T> properties_;
270 unique_ptr<T> defaultValue_;
286template <
typename EnumType,
typename StorageType>
295 :
DataPieceValue<StorageType>(label, static_cast<StorageType>(defaultValue)) {}
308 bool get(EnumType& e)
const {
311 e =
static_cast<EnumType
>(v);
318 bool set(
const EnumType e) {
334 outDefault =
static_cast<EnumType
>(v);
vector< int8_t > & getFixedData()
Definition DataLayout.h:237
DataPieceValue specialization class to store enums more conveniently and safely.
Definition DataPieceValue.h:287
bool get(EnumType &e) const
Definition DataPieceValue.h:308
DataPieceEnum(const string &label, EnumType defaultValue)
Definition DataPieceValue.h:294
EnumType get() const
Definition DataPieceValue.h:300
DataPieceEnum(const string &label)
Definition DataPieceValue.h:290
EnumType getDefault() const
Definition DataPieceValue.h:324
void setDefault(const EnumType defaultValue)
Definition DataPieceValue.h:340
bool set(const EnumType e)
Definition DataPieceValue.h:318
bool getDefault(EnumType &outDefault) const
Definition DataPieceValue.h:331
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:193
void setMaxIncrement(T maxIncrement)
Definition DataPieceValue.h:208
bool get(T &outValue) const
Definition DataPieceValue.h:81
void print(ostream &out, const string &indent) const override
Definition DataLayout.cpp:1176
DataPieceValue(const string &label, T defaultValue)
Definition DataPieceValue.h:49
bool isAvailable() const override
Definition DataPieceValue.h:223
bool getMin(T &outMin) const
Definition DataPieceValue.h:153
void serialize(JsonWrapper &jsonWrapper, const JsonFormatProfileSpec &profile) override
Definition DataLayout.cpp:1222
size_t getVariableSize() const override
Definition DataPieceValue.h:64
bool set(const T &value)
Definition DataPieceValue.h:95
bool getProperty(const string &propertyName, T &outValue) const
Definition DataPieceValue.h:135
bool isSame(const DataPiece *rhs) const override
Definition DataLayout.cpp:1212
void setMinIncrement(T minIncrement)
Definition DataPieceValue.h:201
void printCompact(ostream &out, const string &indent) const override
Definition DataLayout.cpp:1203
bool getMaxIncrement(T &outMaxIncrement) const
Definition DataPieceValue.h:171
T get() const
Definition DataPieceValue.h:74
void setMax(T max)
Definition DataPieceValue.h:185
void setProperty(const string &propertyName, T value)
Definition DataPieceValue.h:146
void setIncrement(T minIncrement, T maxIncrement)
Definition DataPieceValue.h:216
bool stageFrom(const DataPiece *) override
Stage value from another piece known to be of the same type.
Definition DataPieceValue.h:264
const string & getElementTypeName() const override
Definition DataPieceValue.h:59
void setDefault(const T &defaultValue)
Definition DataPieceValue.h:123
T getDefault() const
Definition DataPieceValue.h:106
void setMin(T min)
Definition DataPieceValue.h:178
unique_ptr< DataPiece > clone() const override
Definition DataPieceValue.h:252
bool getMax(T &outMax) const
Definition DataPieceValue.h:159
bool getMinIncrement(T &outMinIncrement) const
Definition DataPieceValue.h:165
DataPieceValue(const string &label)
Definition DataPieceValue.h:45
size_t collectVariableData(int8_t *, size_t) override
Definition DataPieceValue.h:69
bool getDefault(T &outDefault) const
Definition DataPieceValue.h:112
Definition AsyncDiskFileChunk.hpp:49
DataPieceType
Specifier for a type of DataPiece.
Definition DataLayout.h:57