VRS
A file format for sensor data.
Loading...
Searching...
No Matches
DataPieceString.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#ifndef DATA_PIECES_STRING_H
20#define DATA_PIECES_STRING_H
21
22#ifndef DATA_PIECES_H
23#include "DataPieces.h"
24#endif
25
26namespace vrs {
27
28using std::min;
29using std::ostream;
30using std::string;
31
36class DataPieceString : public DataPiece {
37 public:
39 explicit DataPieceString(string label, string defaultValue = {})
40 : DataPiece(std::move(label), DataPieceType::String, DataLayout::kVariableSize),
41 defaultString_{std::move(defaultValue)} {}
44 explicit DataPieceString(const MakerBundle& bundle);
45
48 const string& getElementTypeName() const override;
51 size_t getVariableSize() const override {
52 return stagedString_.size();
53 }
58 size_t collectVariableData(int8_t* data, size_t bufferSize) override;
59
63 void stage(const string& string) {
64 stagedString_ = string;
65 }
69 void stage(string&& string) {
70 stagedString_ = std::move(string);
71 }
75 const string& stagedValue() const {
76 return stagedString_;
77 }
81 string& stagedValue() {
82 return stagedString_;
83 }
84
87 string get() const;
90 bool get(string& outString) const;
91
93 bool hasDefault() const {
94 return !defaultString_.empty();
95 }
97 const string& getDefault() const {
98 return defaultString_;
99 }
101 void setDefault(const string& defaultString) {
102 defaultString_ = defaultString;
103 }
105 void setDefault(string&& defaultString) {
106 defaultString_ = std::move(defaultString);
107 }
108
110 void initToDefault() override {
111 stagedString_ = defaultString_;
112 }
113
118 bool patchValue(const string& str) const {
119 auto* patchedPiece = layout_.getMappedPiece<DataPieceString>(pieceIndex_);
120 return patchedPiece != nullptr && (patchedPiece->stage(str), true);
121 }
122
124 bool isAvailable() const override;
125
130 void print(ostream& out, const string& indent) const override;
135 void printCompact(ostream& out, const string& indent) const override;
140 bool isSame(const DataPiece* rhs) const override;
141
145 void serialize(JsonWrapper& jsonWrapper, const JsonFormatProfileSpec& profile) override;
146
149 bool stageCurrentValue() override {
150 return get(stagedValue());
151 }
152
156 unique_ptr<DataPiece> clone() const override {
157 auto other = std::make_unique<DataPieceString>(getLabel());
158 other->tags_ = tags_;
159 other->required_ = required_;
160 other->defaultString_ = defaultString_;
161 return other;
162 }
163
164 protected:
165 bool copyFrom(const DataPiece* original) override {
166 const DataPieceString* cloneString = reinterpret_cast<const DataPieceString*>(original);
167 return cloneString->get(stagedString_);
168 }
169
170 private:
171 string stagedString_;
172 string defaultString_;
173};
174
175} // namespace vrs
176
177#endif // DATA_PIECES_STRING_H
The DataLayout class describes the data stored inside a DataLayoutContentBlock.
Definition DataLayout.h:191
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
DataPiece for variable length string.
Definition DataPieceString.h:36
size_t collectVariableData(int8_t *data, size_t bufferSize) override
Definition DataLayout.cpp:1756
bool copyFrom(const DataPiece *original) override
Set or stage value from another piece known to be of the same type.
Definition DataPieceString.h:165
void setDefault(const string &defaultString)
Set the default string, in case the DataLayout is mapped, but this DataPiece was not mapped.
Definition DataPieceString.h:101
DataPieceString(string label, string defaultValue={})
Definition DataPieceString.h:39
string & stagedValue()
Definition DataPieceString.h:81
bool stageCurrentValue() override
Definition DataPieceString.h:149
size_t getVariableSize() const override
Definition DataPieceString.h:51
void print(ostream &out, const string &indent) const override
Definition DataLayout.cpp:1787
void setDefault(string &&defaultString)
Set the default string, in case the DataLayout is mapped, but this DataPiece was not mapped.
Definition DataPieceString.h:105
const string & getDefault() const
Get the default string, if one was was set.
Definition DataPieceString.h:97
bool patchValue(const string &str) const
Definition DataPieceString.h:118
bool isAvailable() const override
Tell if a value is available, in this DataLayout or the mapped DataLayout.
Definition DataLayout.cpp:1782
void stage(const string &string)
Definition DataPieceString.h:63
string get() const
Definition DataLayout.cpp:1764
void stage(string &&string)
Definition DataPieceString.h:69
void initToDefault() override
Initialize to default value.
Definition DataPieceString.h:110
const string & getElementTypeName() const override
Definition DataLayout.cpp:1751
void printCompact(ostream &out, const string &indent) const override
Definition DataLayout.cpp:1804
unique_ptr< DataPiece > clone() const override
Definition DataPieceString.h:156
void serialize(JsonWrapper &jsonWrapper, const JsonFormatProfileSpec &profile) override
Definition DataLayout.cpp:1817
const string & stagedValue() const
Definition DataPieceString.h:75
bool isSame(const DataPiece *rhs) const override
Definition DataLayout.cpp:1809
bool hasDefault() const
Tell if a the DataPiece has a default value.
Definition DataPieceString.h:93
Definition AsyncDiskFileChunk.hpp:49
DataPieceType
Specifier for a type of DataPiece.
Definition DataLayout.h:57
@ String
Variable size array of char, null terminated.
When printing out a DataLayout as json, this class allows to specify what should be included in the g...
Definition DataLayout.h:84