src/Property.h

Sun, 02 Feb 2014 17:06:39 +0200

author
Teemu Piippo <crimsondusk64@gmail.com>
date
Sun, 02 Feb 2014 17:06:39 +0200
changeset 88
5def6ff8b466
child 108
6409ece8297c
permissions
-rw-r--r--

- reformatting

88
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
1 /*
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
2 Copyright 2012-2014 Santeri Piippo
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
3 All rights reserved.
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
4
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
5 Redistribution and use in source and binary forms, with or without
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
6 modification, are permitted provided that the following conditions
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
7 are met:
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
8
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
9 1. Redistributions of source code must retain the above copyright
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
10 notice, this list of conditions and the following disclaimer.
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
11 2. Redistributions in binary form must reproduce the above copyright
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
12 notice, this list of conditions and the following disclaimer in the
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
13 documentation and/or other materials provided with the distribution.
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
14 3. The name of the author may not be used to endorse or promote products
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
15 derived from this software without specific prior written permission.
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
16
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
17 THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
18 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
19 OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
20 IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
21 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
22 NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
23 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
24 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
25 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
26 THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
27 */
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
28
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
29 #ifndef BOTC_PROPERTY_H
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
30 #define BOTC_PROPERTY_H
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
31
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
32 // =============================================================================
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
33 //
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
34 // Identifier names
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
35 //
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
36 #define PROPERTY_SET_ACCESSOR(NAME) Set##NAME
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
37 #define PROPERTY_GET_ACCESSOR(NAME) Get##NAME
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
38 #define PROPERTY_IS_ACCESSOR(NAME) Is##NAME // for bool types
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
39 #define PROPERTY_MEMBER_NAME(NAME) m##NAME
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
40
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
41 // Names of operations
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
42 #define PROPERTY_APPEND_OPERATION(NAME) AppendTo##NAME
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
43 #define PROPERTY_PREPEND_OPERATION(NAME) PrependTo##NAME
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
44 #define PROPERTY_REPLACE_OPERATION(NAME) ReplaceIn##NAME
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
45 #define PROPERTY_INCREASE_OPERATION(NAME) Increase##NAME
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
46 #define PROPERTY_DECREASE_OPERATION(NAME) Decrease##NAME
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
47 #define PROPERTY_TOGGLE_OPERATION(NAME) Toggle##NAME
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
48 #define PROPERTY_PUSH_OPERATION(NAME) PushTo##NAME
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
49 #define PROPERTY_REMOVE_OPERATION(NAME) RemoveFrom##NAME
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
50 #define PROPERTY_CLEAR_OPERATION(NAME) Clear##NAME
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
51 #define PROPERTY_COUNT_OPERATION(NAME) Count##NAME
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
52
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
53 // Operation definitions
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
54 // These are the methods of the list type that are called in the operations.
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
55 #define PROPERTY_APPEND_METHOD_NAME Append // String::Append
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
56 #define PROPERTY_PREPEND_METHOD_NAME Prepend // String::Prepend
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
57 #define PROPERTY_REPLACE_METHOD_NAME Replace // String::Replace
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
58 #define PROPERTY_PUSH_METHOD_NAME Append // List<T>::Append
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
59 #define PROPERTY_REMOVE_METHOD_NAME Remove // List<T>::Remove
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
60 #define PROPERTY_CLEAR_METHOD_NAME Clear // List<T>::Clear
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
61
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
62 // =============================================================================
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
63 //
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
64 // Main PROPERTY macro
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
65 //
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
66 #define PROPERTY(ACCESS, TYPE, NAME, OPS, WRITETYPE) \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
67 private: \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
68 TYPE PROPERTY_MEMBER_NAME(NAME); \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
69 \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
70 public: \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
71 inline TYPE const& PROPERTY_GET_READ_METHOD (NAME, OPS) const \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
72 { \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
73 return PROPERTY_MEMBER_NAME(NAME); \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
74 } \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
75 \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
76 ACCESS: \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
77 PROPERTY_MAKE_WRITE (TYPE, NAME, WRITETYPE) \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
78 PROPERTY_DEFINE_OPERATIONS (TYPE, NAME, OPS)
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
79
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
80 // =============================================================================
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
81 //
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
82 // PROPERTY_GET_READ_METHOD
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
83 //
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
84 // This macro uses the OPS argument to construct the name of the actual
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
85 // macro which returns the name of the get accessor. This is so that the
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
86 // bool properties get is<NAME>() accessors while non-bools get get<NAME>()
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
87 //
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
88 #define PROPERTY_GET_READ_METHOD(NAME, OPS) \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
89 PROPERTY_GET_READ_METHOD_##OPS (NAME)
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
90
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
91 #define PROPERTY_GET_READ_METHOD_BOOL_OPS(NAME) PROPERTY_IS_ACCESSOR (NAME)()
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
92 #define PROPERTY_GET_READ_METHOD_NO_OPS(NAME) PROPERTY_GET_ACCESSOR (NAME)()
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
93 #define PROPERTY_GET_READ_METHOD_STR_OPS(NAME) PROPERTY_GET_ACCESSOR (NAME)()
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
94 #define PROPERTY_GET_READ_METHOD_NUM_OPS(NAME) PROPERTY_GET_ACCESSOR (NAME)()
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
95 #define PROPERTY_GET_READ_METHOD_LIST_OPS(NAME) PROPERTY_GET_ACCESSOR (NAME)()
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
96
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
97 // =============================================================================
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
98 //
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
99 // PROPERTY_MAKE_WRITE
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
100 //
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
101 // This macro uses the WRITETYPE argument to construct the set accessor of the
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
102 // property. If WRITETYPE is STOCK_WRITE, an inline method is defined to just
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
103 // set the new value of the property. If WRITETYPE is CUSTOM_WRITE, the accessor
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
104 // is merely declared and is left for the user to define.
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
105 //
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
106 #define PROPERTY_MAKE_WRITE(TYPE, NAME, WRITETYPE) \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
107 PROPERTY_MAKE_WRITE_##WRITETYPE (TYPE, NAME)
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
108
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
109 #define PROPERTY_MAKE_WRITE_STOCK_WRITE(TYPE, NAME) \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
110 inline void PROPERTY_SET_ACCESSOR(NAME) (TYPE const& a) \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
111 { \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
112 PROPERTY_MEMBER_NAME(NAME) = a; \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
113 }
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
114
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
115 #define PROPERTY_MAKE_WRITE_CUSTOM_WRITE(TYPE, NAME) \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
116 void PROPERTY_SET_ACCESSOR(NAME) (TYPE const& NAME); \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
117
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
118 // =============================================================================
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
119 //
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
120 // PROPERTY_DEFINE_OPERATIONS
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
121 //
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
122 // This macro may expand into methods defining additional operations for the
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
123 // method.
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
124
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
125 #define PROPERTY_DEFINE_OPERATIONS(TYPE, NAME, OPS) \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
126 DEFINE_PROPERTY_##OPS (TYPE, NAME)
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
127
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
128 // =============================================================================
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
129 //
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
130 // DEFINE_PROPERTY_NO_OPS
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
131 //
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
132 // Obviously NO_OPS expands into no operations.
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
133 //
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
134 #define DEFINE_PROPERTY_NO_OPS(TYPE, NAME)
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
135
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
136 // =============================================================================
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
137 //
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
138 // DEFINE_PROPERTY_STR_OPS
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
139 //
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
140 #define DEFINE_PROPERTY_STR_OPS(TYPE, NAME) \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
141 void PROPERTY_APPEND_OPERATION(NAME) (const TYPE& a) \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
142 { \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
143 TYPE tmp (PROPERTY_MEMBER_NAME(NAME)); \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
144 tmp.PROPERTY_APPEND_METHOD_NAME (a); \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
145 PROPERTY_SET_ACCESSOR(NAME) (tmp); \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
146 } \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
147 \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
148 void PROPERTY_PREPEND_OPERATION(NAME) (const TYPE& a) \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
149 { \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
150 TYPE tmp (PROPERTY_MEMBER_NAME(NAME)); \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
151 tmp.PROPERTY_PREPEND_METHOD_NAME (a); \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
152 PROPERTY_SET_ACCESSOR(NAME) (tmp); \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
153 } \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
154 \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
155 void PROPERTY_REPLACE_OPERATION(NAME) (const TYPE& a, const TYPE& b) \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
156 { \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
157 TYPE tmp (PROPERTY_MEMBER_NAME(NAME)); \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
158 tmp.PROPERTY_REPLACE_METHOD_NAME (a, b); \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
159 PROPERTY_SET_ACCESSOR(NAME) (tmp); \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
160 }
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
161
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
162 // =============================================================================
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
163 //
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
164 // DEFINE_PROPERTY_NUM_OPS
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
165 //
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
166 #define DEFINE_PROPERTY_NUM_OPS(TYPE, NAME) \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
167 inline void PROPERTY_INCREASE_OPERATION(NAME) (TYPE a = 1) \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
168 { \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
169 PROPERTY_SET_ACCESSOR(NAME) (PROPERTY_MEMBER_NAME(NAME) + a); \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
170 } \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
171 \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
172 inline void PROPERTY_DECREASE_OPERATION(NAME) (TYPE a = 1) \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
173 { \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
174 PROPERTY_SET_ACCESSOR(NAME) (PROPERTY_MEMBER_NAME(NAME) - a); \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
175 }
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
176
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
177 // =============================================================================
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
178 //
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
179 // DEFINE_PROPERTY_BOOL_OPS
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
180 //
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
181 #define DEFINE_PROPERTY_BOOL_OPS(TYPE, NAME) \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
182 inline void PROPERTY_TOGGLE_OPERATION(NAME)() \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
183 { \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
184 PROPERTY_SET_ACCESSOR(NAME) (!PROPERTY_MEMBER_NAME(NAME)); \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
185 }
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
186
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
187 // =============================================================================
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
188 //
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
189 // DEFINE_PROPERTY_LIST_OPS
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
190 //
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
191 #define DEFINE_PROPERTY_LIST_OPS(TYPE, NAME) \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
192 void PROPERTY_PUSH_OPERATION(NAME) (const TYPE::ValueType& a) \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
193 { \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
194 PROPERTY_MEMBER_NAME(NAME).PROPERTY_PUSH_METHOD_NAME (a); \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
195 } \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
196 \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
197 void PROPERTY_REMOVE_OPERATION(NAME) (const TYPE::ValueType& a) \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
198 { \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
199 PROPERTY_MEMBER_NAME(NAME).PROPERTY_REMOVE_METHOD_NAME (a); \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
200 } \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
201 \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
202 inline void PROPERTY_CLEAR_OPERATION(NAME)() \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
203 { \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
204 PROPERTY_MEMBER_NAME(NAME).PROPERTY_CLEAR_METHOD_NAME(); \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
205 } \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
206 \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
207 public: \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
208 inline int PROPERTY_COUNT_OPERATION(NAME)() const \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
209 { \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
210 return PROPERTY_GET_ACCESSOR (NAME)().Size(); \
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
211 }
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
212
5def6ff8b466 - reformatting
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
213 #endif // BOTC_PROPERTY_H

mercurial