acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
property.h
1#pragma once
2
3
4// Include payload.h
5// Don`t include this file directly
6
7
8#include "payload.h"
9
10
11class property;
12class action_context;
13
14
15#include "acme/memory/memory.h"
16
17
18namespace xml
19{
20
21 class disp_option;
22
23} // namespace xml
24
25//::string CLASS_DECL_ACME operator + (const ::scoped_string & scopedstr, const property & prop);
26//
27//::payload CLASS_DECL_ACME operator - (::i32 i, const property & prop);
28//::payload CLASS_DECL_ACME operator - (::u32 user, const property & prop);
29//::payload CLASS_DECL_ACME operator - (::i64 i, const property & prop);
30//::payload CLASS_DECL_ACME operator - (::u64 u, const property & prop);
31//::payload CLASS_DECL_ACME operator - (::f64 d, const property & prop);
32//::payload CLASS_DECL_ACME operator - (const ::payload & payload, const property & prop);
33
34//::payload CLASS_DECL_ACME operator + (::i32 i, const property & prop);
35//::payload CLASS_DECL_ACME operator + (::u32 user, const property & prop);
36//::payload CLASS_DECL_ACME operator + (::i64 i, const property & prop);
37//::payload CLASS_DECL_ACME operator + (::u64 u, const property & prop);
38//::payload CLASS_DECL_ACME operator + (::f64 d, const property & prop);
39//::payload CLASS_DECL_ACME operator + (const ::payload & payload, const property & prop);
40
41//::payload CLASS_DECL_ACME operator / (::i32 i, const property & prop);
42//::payload CLASS_DECL_ACME operator / (::u32 user, const property & prop);
43//::payload CLASS_DECL_ACME operator / (::i64 i, const property & prop);
44//::payload CLASS_DECL_ACME operator / (::u64 u, const property & prop);
45//::payload CLASS_DECL_ACME operator / (::f64 d, const property & prop);
46//::payload CLASS_DECL_ACME operator / (const ::payload & payload, const property & prop);
47
48//::payload CLASS_DECL_ACME operator * (::i32 i, const property & prop);
49//::payload CLASS_DECL_ACME operator * (::u32 user, const ::property & prop);
50//::payload CLASS_DECL_ACME operator * (::i64 i, const property & prop);
51//::payload CLASS_DECL_ACME operator * (::u64 u, const property & prop);
52//::payload CLASS_DECL_ACME operator * (::f64 d, const property & prop);
53//::payload CLASS_DECL_ACME operator * (const ::payload & payload, const property & prop);
54
55
56//namespace xml
57//{
58//
59//
60// class disp_option;
61// class department;
62// class document;
63// class node;
64// class tree_schema;
65// class output_tree;
66// class input_tree;
67//
68//
69//} // namespace xml
70
71
72//using property = payload;
73
74
75void on_property_construct(property * pproperty);
76void on_property_destruct(property * pproperty);
77
78
79class CLASS_DECL_ACME property :
80 public ::payload
81{
82public:
83
84
85 using PRIMITIVE_PAYLOAD_TAG = PRIMITIVE_PAYLOAD_TAG_TYPE;
86
87
88 using TYPE1 = ::atom;
89 using ARG_TYPE1 = const ::atom &;
90 using TYPE2 = payload;
91 using ARG_TYPE2 = const ::payload &;
92
93
94 ::atom m_atomName;
95
96
97 property() { on_property_construct(this); }
98 property(const ::atom& atom) : m_atomName(atom) { on_property_construct(this); }
99 property(const ::atom& atom, const ::payload& payload) : m_atomName(atom), ::payload(payload) { on_property_construct(this); }
100 property(const ::property& property) : m_atomName(property.m_atomName), ::payload((const ::payload &) property) { on_property_construct(this); }
101 property(::property&& property) : m_atomName(::transfer(property.m_atomName)), ::payload((::payload &&)::transfer(property)) { on_property_construct(this); }
102 ~property() { on_property_destruct(this); }
103
104
105 void* operator new(size_t size)
106 {
107
108 return ::acme::get()->m_pheapmanagement->memory(::heap::e_memory_property)->allocate(size, nullptr);
109
110 }
111
112
113 void* operator new(size_t size, const_char_pointer /* pszFileName */, ::i32 /* nLine */)
114 {
115
116 return ::acme::get()->m_pheapmanagement->memory(::heap::e_memory_property)->allocate(size, nullptr);
117
118 }
119
120
121 void operator delete(void * p)
122 {
123
124 return ::acme::get()->m_pheapmanagement->memory(::heap::e_memory_property)->free(p);
125
126 }
127
128
129 void operator delete(void * p, const_char_pointer /* pszFileName */, ::i32 /* nLine */)
130 {
131
132 return ::acme::get()->m_pheapmanagement->memory(::heap::e_memory_property)->free(p);
133
134 }
135
136
137 ::atom& element1() { return m_atomName; };
138 const ::atom& element1() const { return m_atomName; };
139 ::payload& element2() { return *this; };
140 const ::payload& element2() const { return *this; };
141
142
143 using payload::operator =;
144 property& operator = (const property& property);
145
146
147 ::atom name() const { return m_atomName; }
148
149
150 inline ::string & get_network_payload(::string & str, bool bNewLine = true) const
151 {
152
153 str += "\"";
154
155 str += m_atomName;
156
157 str += "\"";
158
159 str += ": ";
160
161 payload::get_network_payload(str, bNewLine);
162
163 return str;
164
165 }
166
167 ::string get_network_payload(bool bNewLine = true) const
168 {
169
170 ::string str;
171
172 return get_network_payload(str, bNewLine);
173
174 }
175
176 ::string get_ini_line() const;
177
178 ::string & get_network_arguments(::string & str) const;
179 ::string get_network_arguments() const { ::string str; return get_network_arguments(str); }
180
181
182 template < typename T >
183 inline ::pointer< T >& defer_get(::pointer< T >& pointer) { return pointer = cast < T >(); }
184
185
186 //using payload::operator ::string;
187
188};
189
190CLASS_DECL_ACME binary_stream & operator << (::binary_stream& stream, const property & property);
191CLASS_DECL_ACME binary_stream & operator >> (::binary_stream& stream, property & property);
192//CLASS_DECL_ACME binary_stream& operator << (::binary_stream& stream, const property_particle& property);
193//CLASS_DECL_ACME binary_stream& operator >> (::binary_stream& stream, property_particle& property);
194CLASS_DECL_ACME binary_stream& binary_stream_write_property(::binary_stream& stream, const property& property);
195CLASS_DECL_ACME binary_stream& binary_stream_read_property(::binary_stream& stream, property& property);
196
197using property_pointer = ::property *;
198
199
200CLASS_DECL_ACME void property_parse_network_payload_item(atom & atom, ::ansi_range & range);
201CLASS_DECL_ACME void property_parse_network_payload_payload(::payload & payload, ::ansi_range & range);
202CLASS_DECL_ACME void property_skip_network_payload_item(::ansi_range & range);
203CLASS_DECL_ACME void property_skip_network_payload_payload(::ansi_range & range);
204
205
206#include "acme/prototype/collection/ptr_array.h"
207#include "acme/prototype/collection/auto_ptr_array.h"
208#include "acme/prototype/collection/raw_pointer_array.h"
209#include "acme/prototype/prototype/holder.h"
210
211using property_holder_array_base = ::array_base < ::holder < ::property > >;
212
213//using property_map = map_base < ::atom, const ::atom &, payload, const ::payload &, ::property >;
214
215
216//inline bool operator == (const ::scoped_string & scopedstr, const property & prop)
217//{
218//
219// return str == prop.get_string();
220//
221//}
222
223
224
225//inline ::payload CLASS_DECL_ACME operator - (::i32 i, const property& prop) { return operator - (i, (const ::payload &) prop); }
226//inline ::payload CLASS_DECL_ACME operator - (::u32 user, const property& prop) { return operator - (user, (const ::payload &)prop); }
227//inline ::payload CLASS_DECL_ACME operator - (::i64 i, const property& prop) { return operator - (i, (const ::payload &)prop); }
228//inline ::payload CLASS_DECL_ACME operator - (::u64 u, const property& prop) { return operator - (u, (const ::payload &)prop); }
229//inline ::payload CLASS_DECL_ACME operator - (::f64 d, const property& prop) { return operator - (d, (const ::payload &)prop); }
230//inline ::payload CLASS_DECL_ACME operator - (const ::payload & payload, const property& prop) { return operator - (payload, (const ::payload &)prop); }
231
232//inline ::payload CLASS_DECL_ACME operator + (::i32 i, const property& prop) { return operator + (i, (const ::payload &) prop); }
233//inline ::payload CLASS_DECL_ACME operator + (::u32 user, const property& prop) { return operator + (user, (const ::payload &)prop); }
234//inline ::payload CLASS_DECL_ACME operator + (::i64 i, const property& prop) { return operator + (i, (const ::payload &)prop); }
235//inline ::payload CLASS_DECL_ACME operator + (::u64 u, const property& prop) { return operator + (u, (const ::payload &)prop); }
236//inline ::payload CLASS_DECL_ACME operator + (::f64 d, const property& prop) { return operator + (d, (const ::payload &)prop); }
237//inline ::payload CLASS_DECL_ACME operator + (const ::payload & payload, const property& prop) { return payload, (const ::payload &)prop); }
238
239//inline ::payload CLASS_DECL_ACME operator / (::i32 i, const property& prop) { return operator / (i, (const ::payload &)prop); }
240//inline ::payload CLASS_DECL_ACME operator / (::u32 user, const property& prop) { return operator / (user, (const ::payload &)prop); }
241//inline ::payload CLASS_DECL_ACME operator / (::i64 i, const property& prop) { return operator / (i, (const ::payload&)prop); }
242//inline ::payload CLASS_DECL_ACME operator / (::u64 u, const property& prop) { return operator / (u, (const ::payload&)prop); }
243//inline ::payload CLASS_DECL_ACME operator / (::f64 d, const property& prop) { return operator / (d, (const ::payload&) prop); }
244//inline ::payload CLASS_DECL_ACME operator / (const ::payload & payload, const property& prop) { return operator / (payload, (const ::payload&) prop); }
245
246//inline ::payload CLASS_DECL_ACME operator * (::i32 i, const property& prop) { return operator * (i, (const ::payload&) prop); }
247//inline ::payload CLASS_DECL_ACME operator * (::u32 user, const ::property& prop) { return operator * (user, (const ::payload&) prop); }
248//inline ::payload CLASS_DECL_ACME operator * (::i64 i, const property& prop) { return operator * (i, (const ::payload&) prop); }
249//inline ::payload CLASS_DECL_ACME operator * (::u64 u, const property& prop) { return operator * (u, (const ::payload&)prop); }
250//inline ::payload CLASS_DECL_ACME operator * (::f64 d, const property& prop) { return operator * (d, (const ::payload&)prop); }
251//inline ::payload CLASS_DECL_ACME operator * (const ::payload & payload, const property& prop) { return operator * (payload, (const ::payload&)prop); }
252
253
254
255
256
257//template < typename TYPE_CHAR >
258//string_base < TYPE_CHAR >::string_base(const ::property & property) :
259// string_base(property.string())
260//{
261//
262//
263//}
264//
265
266
267//template < typename TYPE_CHAR >
268//string_base < TYPE_CHAR > & string_base < TYPE_CHAR >::operator +=(const ::property & property)
269//{
270//
271// return append(property);
272//
273//}
274//
275
276
277//template < typename ITERATOR_TYPE >
278//inline string_base < ITERATOR_TYPE >::string_base(const ::property & property) :
279// string_base(property.as_string())
280//{
281//
282//
283//}
284
285
286//template < typename ITERATOR_TYPE >
287//inline string_base < ITERATOR_TYPE > & string_base < ITERATOR_TYPE >::operator = (const ::property & property)
288//{
289//
290// assign(property.as_string());
291//
292// return *this;
293//
294//}
295
296
297//template < character_count n >
298//::string operator + (const ::property & property, const ::i8 (&cha)[n])
299//{
300//
301// return ::transfer(property.get_string() + cha);
302//
303//}
304//
305
306//template < typename ITERATOR_TYPE >
307//string_base < ITERATOR_TYPE > & string_base < ITERATOR_TYPE >::operator = (const ::property & property)
308//{
309//
310// return operator=(property.as_string());
311//
312//}
313
314
315// template < typename ITERATOR_TYPE >
316// string_base < ITERATOR_TYPE > & string_base < ITERATOR_TYPE >::operator += (const ::property & property)
317// {
318//
319// return this->append(property);
320//
321// }
322
323
324template < typename ITERATOR_TYPE >
325string_base < ITERATOR_TYPE > & string_base < ITERATOR_TYPE >::append(const ::property & property)
326{
327
328 return append((const ::payload &)property);
329
330}
331
332namespace file
333{
334
335
336 inline path::path(const ::property & property) :
337 path(property.as_file_path())
338 {
339
340 }
341
342
343} // namespace file
344
345
346
347
348
349
Definition action_context.h:9
Definition atom.h:237
Definition binary_stream.h:12
Definition path.h:52
Definition payload.h:54
Definition property.h:81
Definition range.h:223
Definition ___serialization_draft.h:42
Definition filesystem.h:16
Definition _forward_declaration.h:1313