acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
property_object.h
1//
2// property_object.h
3// apex
4//
5// Created by Camilo Sasuke Thomas Borregaard Soerensen on 02/06/19.
6//
7#pragma once
8
9
10#include "matter.h"
11//#include "linked_property.h"
12#include "acme/prototype/string/scoped_string_base.h"
13#include "payload.h"
14
15
16class object;
17
18
19class CLASS_DECL_ACME property_object :
20 virtual public ::matter
21{
22public:
23
24
25 ::pointer<::property_set> m_ppropertyset;
26
27
28 property_object() { }
29 ~property_object() override;
30
31
32 void destroy() override;
33
34
35 virtual void notify_on_destroy(::property_object * pcontextobjectFinish) override;
36
37
38 virtual void ping();
39 virtual void on_ping();
40 virtual bool is_pinging() const;
41
42
43 //void call() override;
44
45
46 //virtual void run() override;
47
48
49 virtual ::object * source_channel();
50
51
52
53 //virtual void exchange(::stream & stream) override;
54 //virtual void exchange(::payload_stream& stream) override;
55
56
57 virtual void handle_exception(const ::exception& e);
58
59
60 virtual void add_exception(const ::exception & e);
61 virtual void on_catch_all_exception();
62
63
64
65 //virtual stream & write(::stream & stream) const override;
66 //virtual stream & read(::stream & stream) override;
67
68
69
70
71
72
73
74
75//#ifdef GCC_PORKBARBECUE_AND_CPP_ALMOST_STILL_C_BECAUSE_OF_LINUX_TORRVARUDUS
76//
77// inline GCC_PORKBARBECUE_AND_CPP_ALMOST_STILL_C_BECAUSE_OF_LINUX_TORRVARUDUS_routine_array & _routine_array(const ::atom& atom);
78//
79// inline GGCC_PORKBARBECUE_AND_CPP_ALMOST_STILL_C_BECAUSE_OF_LINUX_TORRVARUDUS_routine_array & ::procedure_array(const ::atom & atom);
80//
81//#else
82
83 //inline ::procedure_array * _routine_array(const ::atom& atom);
84
85//#endif
86
87 virtual ::string get_object_file_name();
88
89 virtual ::file::path get_ini_configuration_path();
90
91 virtual bool include_hostname_in_configuration_path();
92
93 virtual void read_ini_configuration();
94 virtual void write_ini_configuration();
95
96 virtual void read_configuration_from_ini(const ::payload & payloadFile);
97 virtual void write_configuration_to_ini(const ::payload & payloadFile);
98
99 bool has_property(const atom & atom) const;
100 ::property * lookup_property(const atom & atom) const;
101 bool erase_key(const atom & atom);
102
103 ::property_set & property_set();
104 bool has_property_set() const;
105 bool contains(const ::property_set & set) const;
106
107 using matter::set_flag;
108
109// template < typename TYPE >
110// inline void set(const ::atom & atom, const TYPE & t);
111//
112// template < typename TYPE >
113// inline void get(const ::atom & atom, TYPE & t);
114
115 //::payload & topic(const ::atom & atom);
116
117 ::collection::index index_of_property(const ::atom & atom) const;
118
119 //::extended::status run_property(const ::atom& atom);
120
121 void defer_run_property(const ::atom& atom);
122
123 ::collection::index index_of_attribute(const ::atom & atom);
124 ::property & lookup_attribute(const ::atom& atom);
125 ::property& attribute(const ::atom& atom);
126
127 template < typename TYPE >
128 inline bool lookup_attribute(const ::atom & atom, TYPE & t);
129
130 template < typename TYPE >
131 inline TYPE & get_attribute(const ::atom& atom, TYPE& t);
132
133 //::payload & get_object(const ::atom & atom);
134
135 //::payload operator()(const ::atom & atom) const;
136 //::payload operator()(const ::atom & atom, const ::payload & payloadDefault) const;
137
138 //::payload & operator[](const ::atom & atom);
139
140 //::payload operator[](const ::atom & atom) const;
141
142 ::property & property(const ::atom & atom);
143
144 ::property & property(const ::atom & atom) const
145 {
146
147 return ((::property_object *)this)->property(atom);
148
149 }
150
151
152 ::payload get_payload(const ::atom & atom, const ::payload & payloadDefault) const;
153
154
155 ::payload& payload(const ::atom& atom) { return this->property(atom); }
156
157 ::payload payload(const ::atom& atom) const;
158 //::payload payload(const ::atom & atom, const ::payload & payloadDefault) const;
159
160 ::collection::index index_of_payload(const ::atom & atom) const;
161 //::payload find_payload(const ::atom & atom, const ::payload & payloadDefault) const;
162
163
164 string get_string(const ::atom& atom, const ::scoped_string& scopedstrDefault = {}) const;
165
166 ::i32 get_int(const ::atom & atom, ::i32 iDefault = 0) const;
167
168 ::u32 get_u32(const ::atom & atom, ::u32 uDefault = 0) const;
169
170 //template < typename TYPE > inline TYPE & get_cast(const ::atom & atom, TYPE * pDefault = nullptr);
171
172 using matter::cast;
173
174 template < ::prototype_subparticle TYPE >
175 inline TYPE * cast(const ::atom & atom) const;
176
177 void defer_propset();
178
179 bool is_true(const ::atom & atom) const;
180 bool is_false(const ::atom & atom) const;
181 bool is_true_or_empty(const ::atom & atom) const;
182 //inline bool is_true(const ::atom & atom, const ::payload & payloadDefault, bool bDefault) const;
183
184 //virtual string get_text(const ::payload & payload, const ::atom & atom);
185
186 //virtual linked_property parent_lookup_property(const atom & atom) const;
187
188 virtual void property_set_replace(string & str) const;
189 virtual string property_set_evaluate(const ::scoped_string & scopedstr) const;
190 virtual string property_set_get_evaluation(const ::scoped_string & scopedstr) const;
191 virtual string property_set_get_string(const ::scoped_string & scopedstr) const;
192 virtual bool property_set_get_string(string & strResult, const ::scoped_string & scopedstr) const;
193 virtual bool property_set_get_evaluation(string & strResult, const ::scoped_string & scopedstr) const;
194
195 //virtual atom translate_property_id(const ::atom & atom);
196
197 virtual void notify_property_changed(::property* pproperty, const ::action_context& actioncontext);
198
199 virtual void on_property_changed(::property * pproperty, const ::action_context& actioncontext);
200
201 //virtual ::linked_property fetch_property(const ::atom & atom, bool bCreate = true);
202
203 //virtual ::linked_property on_fetch_property(const ::atom & atom) const;
204
205 virtual ::property_object * parent_property_set_holder() const;
206
207
208};
209
210
211using reference_pointer = ::pointer<::property_object>;
212
213
214#define __add_runnable(array, ID) add_predicate(array, [this]() { ID(); } )
215
216
217
218//template < typename TYPE >
219//inline ::pointer<TYPE> __cast(::element * p)
220//{
221//
222// return dynamic_cast <TYPE *> (p);
223//
224//}
225
226
227
228template < prototype_subparticle TYPE >
229inline TYPE * property_object::cast(const ::atom & atom) const
230{
231
232 auto pproperty = this->lookup_property(atom);
233
234 if (!pproperty)
235 {
236
237 return nullptr;
238
239 }
240
241 return pproperty->cast < TYPE >();
242
243}
244
245
Definition atom.h:237
Definition bbb_object.h:11
void defer_run_property(const ::atom &atom)
Definition property_object.cpp:760