00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef Reflex_VariableBuilder
00013 #define Reflex_VariableBuilder
00014
00015
00016 #include "Reflex/Reflex.h"
00017 #include "Reflex/Builder/TypeBuilder.h"
00018
00019
00020 namespace Reflex {
00021
00022
00023
00024
00025
00026
00027
00028 class RFLX_API VariableBuilder {
00029 public:
00030
00031 VariableBuilder(const char* nam,
00032 const Type &typ,
00033 size_t offs,
00034 unsigned int modifiers = 0);
00035
00036
00037
00038 virtual ~VariableBuilder();
00039
00040
00041
00042
00043
00044
00045
00046
00047 VariableBuilder& AddProperty(const char* key,
00048 Any value);
00049 VariableBuilder& AddProperty(const char* key,
00050 const char* value);
00051
00052
00053
00054
00055
00056
00057 Member ToMember();
00058
00059 private:
00060
00061 Member fDataMember;
00062
00063 };
00064
00065
00066
00067
00068
00069
00070
00071
00072 class RFLX_API VariableBuilderImpl {
00073 public:
00074
00075 VariableBuilderImpl(const char* nam,
00076 const Type &typ,
00077 size_t offs,
00078 unsigned int modifiers = 0);
00079
00080
00081
00082 ~VariableBuilderImpl();
00083
00084
00085
00086
00087
00088
00089
00090 void AddProperty(const char* key,
00091 Any value);
00092 void AddProperty(const char* key,
00093 const char* value);
00094
00095
00096
00097
00098
00099
00100 Member ToMember();
00101
00102 private:
00103
00104 Member fDataMember;
00105
00106 };
00107
00108
00109
00110
00111
00112
00113
00114
00115 template <typename D> class VariableBuilderT {
00116 public:
00117
00118 VariableBuilderT(const char* nam,
00119 size_t offs,
00120 unsigned int modifiers = 0);
00121
00122
00123
00124 virtual ~VariableBuilderT() {}
00125
00126
00127
00128
00129
00130
00131
00132
00133 template <typename P>
00134 VariableBuilderT& AddProperty(const char* key,
00135 P value);
00136
00137
00138
00139
00140
00141
00142 Member ToMember();
00143
00144 private:
00145
00146 VariableBuilderImpl fDataMemberBuilderImpl;
00147
00148 };
00149
00150
00151 }
00152
00153
00154
00155 template <typename D>
00156 inline Reflex::VariableBuilderT<D>::VariableBuilderT(const char* nam,
00157 size_t offs,
00158 unsigned int modifiers)
00159
00160 : fDataMemberBuilderImpl(nam,
00161 TypeDistiller<D>::Get(),
00162 offs,
00163 modifiers) {
00164 }
00165
00166
00167
00168 template <typename D> template <typename P>
00169 inline Reflex::VariableBuilderT<D>&
00170 Reflex::VariableBuilderT<D
00171 >::AddProperty(const char* key,
00172 P value) {
00173
00174 fDataMemberBuilderImpl.AddProperty(key, value);
00175 return *this;
00176 }
00177
00178
00179
00180 template <typename D> inline Reflex::Member
00181 Reflex::VariableBuilderT<D
00182 >::ToMember() {
00183
00184 return fDataMemberBuilderImpl.ToMember();
00185 }
00186
00187
00188 #endif // Reflex_VariableBuilder