WebCFace 3.1.1
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 <vector>
5#ifdef WEBCFACE_MESON
6#include "webcface-config.h"
7#else
8#include "webcface/common/webcface-config.h"
9#endif
11#include "webcface/complete.h"
12
14
15namespace internal {
16struct ClientData;
17}
18
19class Member;
20class Value;
21class Text;
22class View;
23class Image;
24class Func;
25class FuncListener;
26class RobotModel;
27class Canvas2D;
28class Canvas3D;
29class Log;
30
41
49
50 FieldBase() = default;
51 explicit FieldBase(const SharedString &member)
52 : member_(member), field_() {}
53 FieldBase(const SharedString &member, const SharedString &field)
54 : member_(member), field_(field) {}
55 FieldBase(const FieldBase &base, const SharedString &field)
56 : member_(base.member_), field_(field) {}
57
58 bool operator==(const FieldBase &rhs) const {
59 return this->member_ == rhs.member_ && this->field_ == rhs.field_;
60 }
61 bool operator!=(const FieldBase &rhs) const { return !(*this == rhs); }
62};
63
68struct WEBCFACE_DLL Field : public FieldBase {
74 std::weak_ptr<internal::ClientData> data_w;
75
76 Field() = default;
77 Field(const std::weak_ptr<internal::ClientData> &data_w,
78 const SharedString &member)
79 : FieldBase(member), data_w(data_w) {}
80 Field(const std::weak_ptr<internal::ClientData> &data_w,
81 const SharedString &member, const SharedString &field)
82 : FieldBase(member, field), data_w(data_w) {}
83 Field(const Field &base, const SharedString &field)
84 : FieldBase(base, field), data_w(base.data_w) {}
85
90 std::shared_ptr<internal::ClientData> dataLock() const;
95 std::shared_ptr<internal::ClientData> setCheck() const;
96
97 bool expired() const;
98
103 template <WEBCFACE_COMPLETE(Member)>
104 Member_ member() const {
105 return *this;
106 }
113 StringView name() const { return field_.decodeShare(); }
121 WStringView nameW() const { return field_.decodeShareW(); }
122
123 protected:
124 SharedString lastName8() const;
125
126 public:
127 Field child(const SharedString &field) const;
128
133 std::string lastName() const { return std::string(lastName8().decode()); }
138 std::wstring lastNameW() const {
139 return std::wstring(lastName8().decodeW());
140 }
145 Field parent() const;
154 return child(static_cast<SharedString &>(field));
155 }
161 [[deprecated]]
162 Field child(int index) const {
163 return child(std::to_string(index));
164 }
173 return child(static_cast<SharedString &>(field));
174 }
180 [[deprecated]]
181 Field
182 operator[](int index) const {
183 return child(std::to_string(index));
184 }
185
186 template <WEBCFACE_COMPLETE(Value)>
187 Value_ value(StringInitializer field = StringInitializer()) const {
188 return child(static_cast<SharedString &>(field));
189 }
190 template <WEBCFACE_COMPLETE(Text)>
191 Text_ text(StringInitializer field = StringInitializer()) const {
192 return child(static_cast<SharedString &>(field));
193 }
194 template <WEBCFACE_COMPLETE(RobotModel)>
195 RobotModel_ robotModel(StringInitializer field = StringInitializer()) const {
196 return child(static_cast<SharedString &>(field));
197 }
198 template <WEBCFACE_COMPLETE(Image)>
199 Image_ image(StringInitializer field = StringInitializer()) const {
200 return child(static_cast<SharedString &>(field));
201 }
202 template <WEBCFACE_COMPLETE(Func)>
203 Func_ func(StringInitializer field = StringInitializer()) const {
204 return child(static_cast<SharedString &>(field));
205 }
206 template <WEBCFACE_COMPLETE(FuncListener)>
207 FuncListener_ funcListener(StringInitializer field = StringInitializer()) const {
208 return child(static_cast<SharedString &>(field));
209 }
210 template <WEBCFACE_COMPLETE(View)>
211 View_ view(StringInitializer field = StringInitializer()) const {
212 return child(static_cast<SharedString &>(field));
213 }
214 template <WEBCFACE_COMPLETE(Canvas3D)>
215 Canvas3D_ canvas3D(StringInitializer field = StringInitializer()) const {
216 return child(static_cast<SharedString &>(field));
217 }
218 template <WEBCFACE_COMPLETE(Canvas2D)>
219 Canvas2D_ canvas2D(StringInitializer field = StringInitializer()) const {
220 return child(static_cast<SharedString &>(field));
221 }
225 template <WEBCFACE_COMPLETE(Log)>
227 return child(static_cast<SharedString &>(field));
228 }
229
230
242 std::vector<Field> children() const;
252 std::vector<Field> childrenRecurse() const;
259 bool hasChildren() const;
260
266 template <WEBCFACE_COMPLETE(Value)>
267 std::vector<Value_> valueEntries() const;
273 template <WEBCFACE_COMPLETE(Text)>
274 std::vector<Text_> textEntries() const;
281 template <WEBCFACE_COMPLETE(RobotModel)>
282 std::vector<RobotModel_> robotModelEntries() const;
288 template <WEBCFACE_COMPLETE(Func)>
289 std::vector<Func_> funcEntries() const;
295 template <WEBCFACE_COMPLETE(View)>
296 std::vector<View_> viewEntries() const;
303 template <WEBCFACE_COMPLETE(Canvas2D)>
304 std::vector<Canvas2D_> canvas2DEntries() const;
311 template <WEBCFACE_COMPLETE(Canvas3D)>
312 std::vector<Canvas3D_> canvas3DEntries() const;
318 template <WEBCFACE_COMPLETE(Image)>
319 std::vector<Image_> imageEntries() const;
325 template <WEBCFACE_COMPLETE(Log)>
326 std::vector<Log_> logEntries() const;
327
334 bool isSelf() const;
335
336 bool operator==(const Field &other) const;
337 bool operator!=(const Field &other) const { return !(*this == other); }
338};
339
340extern template std::vector<Value> Field::valueEntries<Value, true>() const;
341extern template std::vector<Text> Field::textEntries<Text, true>() const;
342extern template std::vector<RobotModel>
343Field::robotModelEntries<RobotModel, true>() const;
344extern template std::vector<Func> Field::funcEntries<Func, true>() const;
345extern template std::vector<View> Field::viewEntries<View, true>() const;
346extern template std::vector<Canvas2D>
347Field::canvas2DEntries<Canvas2D, true>() const;
348extern template std::vector<Canvas3D>
349Field::canvas3DEntries<Canvas3D, true>() const;
350extern template std::vector<Image> Field::imageEntries<Image, true>() const;
351extern template std::vector<Log> Field::logEntries<Log, true>() const;
352
u8stringとstringとwstringをshared_ptrで持ち共有する
Definition encoding.h:170
SharedString のpublicなコンストラクタインタフェース (入力専用)
Definition encoding.h:235
webcfaceで管理されている文字列を参照するstring_view
Definition encoding.h:71
bool operator==(const T &other, const InputRef &ref)
Definition text.h:608
メンバ名とデータ名を持つクラス
Definition field.h:35
bool operator==(const FieldBase &rhs) const
Definition field.h:58
SharedString member_
メンバー名
Definition field.h:40
FieldBase(const SharedString &member)
Definition field.h:51
bool operator!=(const FieldBase &rhs) const
Definition field.h:61
FieldBase(const SharedString &member, const SharedString &field)
Definition field.h:53
SharedString field_
フィールド名
Definition field.h:48
FieldBase(const FieldBase &base, const SharedString &field)
Definition field.h:55
ClientDataの参照とメンバ名とデータ名を持つクラス
Definition field.h:68
Text_ text(StringInitializer field=StringInitializer()) const
Definition field.h:191
StringView name() const
field名を返す
Definition field.h:113
Func_ func(StringInitializer field=StringInitializer()) const
Definition field.h:203
Field(const std::weak_ptr< internal::ClientData > &data_w, const SharedString &member, const SharedString &field)
Definition field.h:80
Log_ log(StringInitializer field=StringInitializer()) const
Definition field.h:226
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:104
Field(const std::weak_ptr< internal::ClientData > &data_w, const SharedString &member)
Definition field.h:77
FuncListener_ funcListener(StringInitializer field=StringInitializer()) const
Definition field.h:207
std::vector< Text_ > textEntries() const
「(thisの名前).(追加の名前)」で公開されているtextのリストを返す。
Field operator[](int index) const
「(thisの名前).(index)」を新しい名前とするField
Definition field.h:182
Field(const Field &base, const SharedString &field)
Definition field.h:83
bool operator!=(const Field &other) const
Definition field.h:337
std::vector< Image_ > imageEntries() const
「(thisの名前).(追加の名前)」で公開されているimageのリストを返す。
RobotModel_ robotModel(StringInitializer field=StringInitializer()) const
Definition field.h:195
std::vector< Log_ > logEntries() const
「(thisの名前).(追加の名前)」で公開されているlogのリストを返す。
Field child(StringInitializer field) const
「(thisの名前).(追加の名前)」を新しい名前とするField
Definition field.h:153
Canvas3D_ canvas3D(StringInitializer field=StringInitializer()) const
Definition field.h:215
std::vector< Func_ > funcEntries() const
「(thisの名前).(追加の名前)」で公開されているfuncのリストを返す。
std::string lastName() const
nameのうちピリオドで区切られた最後の部分を取り出す
Definition field.h:133
Field()=default
Canvas2D_ canvas2D(StringInitializer field=StringInitializer()) const
Definition field.h:219
std::vector< Value_ > valueEntries() const
「(thisの名前).(追加の名前)」で公開されているvalueのリストを返す。
Image_ image(StringInitializer field=StringInitializer()) const
Definition field.h:199
Field operator[](StringInitializer field) const
「(thisの名前).(追加の名前)」を新しい名前とするField
Definition field.h:172
std::weak_ptr< internal::ClientData > data_w
ClientDataの参照
Definition field.h:74
std::vector< Canvas3D_ > canvas3DEntries() const
「(thisの名前).(追加の名前)」で公開されているcanvas3Dのリストを返す。
View_ view(StringInitializer field=StringInitializer()) const
Definition field.h:211
std::wstring lastNameW() const
nameのうちピリオドで区切られた最後の部分を取り出す (wstring)
Definition field.h:138
std::vector< Canvas2D_ > canvas2DEntries() const
「(thisの名前).(追加の名前)」で公開されているcanvas2Dのリストを返す。
WStringView nameW() const
field名を返す (wstring)
Definition field.h:121
Value_ value(StringInitializer field=StringInitializer()) const
Definition field.h:187
std::vector< RobotModel_ > robotModelEntries() const
「(thisの名前).(追加の名前)」で公開されているrobotModelのリストを返す。
#define WEBCFACE_DLL
Definition webcface-config.h:69
#define WEBCFACE_NS_END
Definition webcface-config.h:113
#define WEBCFACE_NS_BEGIN
Definition webcface-config.h:112