WebCFace 2.9.0
Web-based Communication Framework & Dashboard-like UI
Loading...
Searching...
No Matches
field.h
Go to the documentation of this file.
1#pragma once
2#include <memory>
3#include <string>
4#include <string_view>
5#include <vector>
6#ifdef WEBCFACE_MESON
7#include "webcface-config.h"
8#else
9#include "webcface/common/webcface-config.h"
10#endif
12#include "webcface/complete.h"
13
15
16namespace internal {
17struct ClientData;
18}
19
20class Member;
21class Value;
22class Text;
23class View;
24class Image;
25class Func;
26class FuncListener;
27class RobotModel;
28class Canvas2D;
29class Canvas3D;
30class Log;
31
32constexpr char field_separator = '.';
33
44
52
53 FieldBase() = default;
54 explicit FieldBase(const SharedString &member)
55 : member_(member), field_() {}
56 FieldBase(const SharedString &member, const SharedString &field)
57 : member_(member), field_(field) {}
58 FieldBase(const FieldBase &base, const SharedString &field)
59 : member_(base.member_), field_(field) {}
60
61 bool operator==(const FieldBase &rhs) const {
62 return this->member_ == rhs.member_ && this->field_ == rhs.field_;
63 }
64 bool operator!=(const FieldBase &rhs) const { return !(*this == rhs); }
65};
66
71struct WEBCFACE_DLL Field : public FieldBase {
77 std::weak_ptr<internal::ClientData> data_w;
78
79 Field() = default;
80 Field(const std::weak_ptr<internal::ClientData> &data_w,
81 const SharedString &member)
82 : FieldBase(member), data_w(data_w) {}
83 Field(const std::weak_ptr<internal::ClientData> &data_w,
84 const SharedString &member, const SharedString &field)
85 : FieldBase(member, field), data_w(data_w) {}
86 Field(const Field &base, const SharedString &field)
87 : FieldBase(base, field), data_w(base.data_w) {}
88
93 std::shared_ptr<internal::ClientData> dataLock() const;
98 std::shared_ptr<internal::ClientData> setCheck() const;
99
100 bool expired() const;
101
106 template <WEBCFACE_COMPLETE(Member)>
107 Member_ member() const {
108 return *this;
109 }
114 const std::string &name() const { return field_.decode(); }
119 const std::wstring &nameW() const { return field_.decodeW(); }
120
121 protected:
122 SharedString lastName8() const;
123
124 public:
125 Field child(const SharedString &field) const;
126
131 std::string lastName() const { return lastName8().decode(); }
136 std::wstring lastNameW() const { return lastName8().decodeW(); }
141 Field parent() const;
146 Field child(std::string_view field) const {
147 return child(SharedString::encode(field));
148 }
153 Field child(std::wstring_view field) const {
154 return child(SharedString::encode(field));
155 }
161 [[deprecated]]
162 Field child(int index) const {
163 return child(std::to_string(index));
164 }
169 Field operator[](std::string_view field) const { return child(field); }
174 Field operator[](std::wstring_view field) const { return child(field); }
180 [[deprecated]]
181 Field operator[](int index) const {
182 return child(std::to_string(index));
183 }
184
185 template <WEBCFACE_COMPLETE(Value)>
186 Value_ value(std::string_view field = "") const {
187 return child(field);
188 }
189 template <WEBCFACE_COMPLETE(Value)>
190 Value_ value(std::wstring_view field) const {
191 return child(field);
192 }
193 template <WEBCFACE_COMPLETE(Text)>
194 Text_ text(std::string_view field = "") const {
195 return child(field);
196 }
197 template <WEBCFACE_COMPLETE(Text)>
198 Text_ text(std::wstring_view field) const {
199 return child(field);
200 }
201 template <WEBCFACE_COMPLETE(RobotModel)>
202 RobotModel_ robotModel(std::string_view field = "") const {
203 return child(field);
204 }
205 template <WEBCFACE_COMPLETE(RobotModel)>
206 RobotModel_ robotModel(std::wstring_view field) const {
207 return child(field);
208 }
209 template <WEBCFACE_COMPLETE(Image)>
210 Image_ image(std::string_view field = "") const {
211 return child(field);
212 }
213 template <WEBCFACE_COMPLETE(Image)>
214 Image_ image(std::wstring_view field) const {
215 return child(field);
216 }
217 template <WEBCFACE_COMPLETE(Func)>
218 Func_ func(std::string_view field = "") const {
219 return child(field);
220 }
221 template <WEBCFACE_COMPLETE(Func)>
222 Func_ func(std::wstring_view field) const {
223 return child(field);
224 }
225 template <WEBCFACE_COMPLETE(FuncListener)>
226 FuncListener_ funcListener(std::string_view field = "") const {
227 return child(field);
228 }
229 template <WEBCFACE_COMPLETE(FuncListener)>
230 FuncListener_ funcListener(std::wstring_view field) const {
231 return child(field);
232 }
233 template <WEBCFACE_COMPLETE(View)>
234 View_ view(std::string_view field = "") const {
235 return child(field);
236 }
237 template <WEBCFACE_COMPLETE(View)>
238 View_ view(std::wstring_view field) const {
239 return child(field);
240 }
241 template <WEBCFACE_COMPLETE(Canvas3D)>
242 Canvas3D_ canvas3D(std::string_view field = "") const {
243 return child(field);
244 }
245 template <WEBCFACE_COMPLETE(Canvas3D)>
246 Canvas3D_ canvas3D(std::wstring_view field) const {
247 return child(field);
248 }
249 template <WEBCFACE_COMPLETE(Canvas2D)>
250 Canvas2D_ canvas2D(std::string_view field = "") const {
251 return child(field);
252 }
253 template <WEBCFACE_COMPLETE(Canvas2D)>
254 Canvas2D_ canvas2D(std::wstring_view field) const {
255 return child(field);
256 }
260 template <WEBCFACE_COMPLETE(Log)>
261 Log_ log(std::string_view field = "") const {
262 return child(field);
263 }
267 template <WEBCFACE_COMPLETE(Log)>
268 Log_ log(std::wstring_view field) const {
269 return child(field);
270 }
271
272
284 std::vector<Field> children() const;
294 std::vector<Field> childrenRecurse() const;
301 bool hasChildren() const;
302
308 template <WEBCFACE_COMPLETE(Value)>
309 std::vector<Value_> valueEntries() const;
315 template <WEBCFACE_COMPLETE(Text)>
316 std::vector<Text_> textEntries() const;
323 template <WEBCFACE_COMPLETE(RobotModel)>
324 std::vector<RobotModel_> robotModelEntries() const;
330 template <WEBCFACE_COMPLETE(Func)>
331 std::vector<Func_> funcEntries() const;
337 template <WEBCFACE_COMPLETE(View)>
338 std::vector<View_> viewEntries() const;
345 template <WEBCFACE_COMPLETE(Canvas2D)>
346 std::vector<Canvas2D_> canvas2DEntries() const;
353 template <WEBCFACE_COMPLETE(Canvas3D)>
354 std::vector<Canvas3D_> canvas3DEntries() const;
360 template <WEBCFACE_COMPLETE(Image)>
361 std::vector<Image_> imageEntries() const;
367 template <WEBCFACE_COMPLETE(Log)>
368 std::vector<Log_> logEntries() const;
369
376 bool isSelf() const;
377
378 bool operator==(const Field &other) const;
379 bool operator!=(const Field &other) const { return !(*this == other); }
380};
381
382extern template std::vector<Value> Field::valueEntries<Value, true>() const;
383extern template std::vector<Text> Field::textEntries<Text, true>() const;
384extern template std::vector<RobotModel>
385Field::robotModelEntries<RobotModel, true>() const;
386extern template std::vector<Func> Field::funcEntries<Func, true>() const;
387extern template std::vector<View> Field::viewEntries<View, true>() const;
388extern template std::vector<Canvas2D>
389Field::canvas2DEntries<Canvas2D, true>() const;
390extern template std::vector<Canvas3D>
391Field::canvas3DEntries<Canvas3D, true>() const;
392extern template std::vector<Image> Field::imageEntries<Image, true>() const;
393extern template std::vector<Log> Field::logEntries<Log, true>() const;
394
u8stringとstringとwstringをshared_ptrで持ち共有する
Definition encoding.h:67
bool operator==(const T &other, const InputRef &ref)
Definition text.h:574
constexpr char field_separator
Definition field.h:32
メンバ名とデータ名を持つクラス
Definition field.h:38
bool operator==(const FieldBase &rhs) const
Definition field.h:61
SharedString member_
メンバー名
Definition field.h:43
FieldBase(const SharedString &member)
Definition field.h:54
bool operator!=(const FieldBase &rhs) const
Definition field.h:64
FieldBase(const SharedString &member, const SharedString &field)
Definition field.h:56
SharedString field_
フィールド名
Definition field.h:51
FieldBase(const FieldBase &base, const SharedString &field)
Definition field.h:58
ClientDataの参照とメンバ名とデータ名を持つクラス
Definition field.h:71
View_ view(std::wstring_view field) const
Definition field.h:238
Log_ log(std::string_view field="") const
Definition field.h:261
Func_ func(std::string_view field="") const
Definition field.h:218
Canvas2D_ canvas2D(std::wstring_view field) const
Definition field.h:254
FuncListener_ funcListener(std::string_view field="") const
Definition field.h:226
View_ view(std::string_view field="") const
Definition field.h:234
RobotModel_ robotModel(std::wstring_view field) const
Definition field.h:206
const std::string & name() const
field名を返す
Definition field.h:114
Field(const std::weak_ptr< internal::ClientData > &data_w, const SharedString &member, const SharedString &field)
Definition field.h:83
std::vector< View_ > viewEntries() const
「(thisの名前).(追加の名前)」で公開されているviewのリストを返す。
Field child(int index) const
「(thisの名前).(index)」を新しい名前とするField
Definition field.h:162
Member_ member() const
Memberを返す
Definition field.h:107
Func_ func(std::wstring_view field) const
Definition field.h:222
Field child(std::wstring_view field) const
「(thisの名前).(追加の名前)」を新しい名前とするField (wstring)
Definition field.h:153
Log_ log(std::wstring_view field) const
Definition field.h:268
Field(const std::weak_ptr< internal::ClientData > &data_w, const SharedString &member)
Definition field.h:80
Field child(std::string_view field) const
「(thisの名前).(追加の名前)」を新しい名前とするField
Definition field.h:146
std::vector< Text_ > textEntries() const
「(thisの名前).(追加の名前)」で公開されているtextのリストを返す。
Field operator[](int index) const
「(thisの名前).(index)」を新しい名前とするField
Definition field.h:181
FuncListener_ funcListener(std::wstring_view field) const
Definition field.h:230
Field(const Field &base, const SharedString &field)
Definition field.h:86
bool operator!=(const Field &other) const
Definition field.h:379
std::vector< Image_ > imageEntries() const
「(thisの名前).(追加の名前)」で公開されているimageのリストを返す。
Canvas2D_ canvas2D(std::string_view field="") const
Definition field.h:250
const std::wstring & nameW() const
field名を返す (wstring)
Definition field.h:119
RobotModel_ robotModel(std::string_view field="") const
Definition field.h:202
Value_ value(std::string_view field="") const
Definition field.h:186
std::vector< Log_ > logEntries() const
「(thisの名前).(追加の名前)」で公開されているlogのリストを返す。
std::vector< Func_ > funcEntries() const
「(thisの名前).(追加の名前)」で公開されているfuncのリストを返す。
std::string lastName() const
nameのうちピリオドで区切られた最後の部分を取り出す
Definition field.h:131
Field()=default
std::vector< Value_ > valueEntries() const
「(thisの名前).(追加の名前)」で公開されているvalueのリストを返す。
Image_ image(std::wstring_view field) const
Definition field.h:214
std::weak_ptr< internal::ClientData > data_w
ClientDataの参照
Definition field.h:77
Text_ text(std::string_view field="") const
Definition field.h:194
Image_ image(std::string_view field="") const
Definition field.h:210
std::vector< Canvas3D_ > canvas3DEntries() const
「(thisの名前).(追加の名前)」で公開されているcanvas3Dのリストを返す。
Text_ text(std::wstring_view field) const
Definition field.h:198
Value_ value(std::wstring_view field) const
Definition field.h:190
Canvas3D_ canvas3D(std::wstring_view field) const
Definition field.h:246
std::wstring lastNameW() const
nameのうちピリオドで区切られた最後の部分を取り出す (wstring)
Definition field.h:136
std::vector< Canvas2D_ > canvas2DEntries() const
「(thisの名前).(追加の名前)」で公開されているcanvas2Dのリストを返す。
Field operator[](std::wstring_view field) const
「(thisの名前).(追加の名前)」を新しい名前とするField (wstring)
Definition field.h:174
Field operator[](std::string_view field) const
「(thisの名前).(追加の名前)」を新しい名前とするField
Definition field.h:169
std::vector< RobotModel_ > robotModelEntries() const
「(thisの名前).(追加の名前)」で公開されているrobotModelのリストを返す。
Canvas3D_ canvas3D(std::string_view field="") const
Definition field.h:242
#define WEBCFACE_DLL
Definition webcface-config.h:69
#define WEBCFACE_NS_END
Definition webcface-config.h:118
#define WEBCFACE_NS_BEGIN
Definition webcface-config.h:117