00001
00002
00003 namespace dynamic
00004 {
00005 inline internal::var_member<const char*> var::operator[](const char * m) const
00006 {
00007 return internal::var_member<const char*>(*this, m);
00008 }
00009
00010 template<typename T>
00011 var::var(const internal::var_member<T> & m) : m_variant(m.get_var().m_variant)
00012 {
00013 }
00014
00015 namespace internal
00016 {
00017 template<typename Derived, typename DerefType> template<typename T>
00018 var internal::var_methods<Derived,DerefType>::operator+(const T & t) const
00019 {
00020 return deref().impl().op_add(t);
00021 }
00022
00023 template<typename Derived, typename DerefType> template<typename T>
00024 internal::extender internal::var_methods<Derived,DerefType>::extend(const char * m, const T t)
00025 {
00026 deref()[m]=t;
00027 return internal::extender(deref());
00028 }
00029
00030 template<typename Derived, typename DerefType> template<typename T>
00031 var internal::var_methods<Derived,DerefType>::operator-(const T & t) const
00032 {
00033 return deref().impl().op_sub(t);
00034 }
00035
00036 template<typename Derived, typename DerefType> template<typename T>
00037 var var_methods<Derived,DerefType>::operator*(const T & t) const
00038 {
00039 return deref().impl().op_mul(t);
00040 }
00041
00042 template<typename Derived, typename DerefType> template<typename T>
00043 var var_methods<Derived,DerefType>::operator/(const T & t) const
00044 {
00045 return deref().impl().op_div(t);
00046 }
00047
00048 template<typename Derived, typename DerefType> template<typename T>
00049 var var_methods<Derived,DerefType>::operator%(const T & t) const
00050 {
00051 return deref().impl().op_mod(t);
00052 }
00053
00054 template<typename Derived, typename DerefType> template<typename T>
00055 var var_methods<Derived,DerefType>::operator<<(const T & t) const
00056 {
00057 return deref().impl().op_lshift(t);
00058 }
00059
00060 template<typename Derived, typename DerefType> template<typename T>
00061 var var_methods<Derived,DerefType>::operator>>(const T & t) const
00062 {
00063 return deref().impl().op_rshift(t);
00064 }
00065
00066 inline var operator+(const char * t, const var & v)
00067 {
00068 return var(t) + v;
00069 }
00070
00071 template<typename T>
00072 inline var operator+(const char * t, const internal::var_member<T> & v)
00073 {
00074 return var(t) + v;
00075 }
00076
00077 template<typename T>
00078 internal::var_member<const char*> internal::var_member_base<T>::operator[](const char * m) const
00079 {
00080 return internal::var_member<const char*>(get_var(), m);
00081 }
00082
00083 template<typename T> template<typename U>
00084 internal::var_member<var> internal::var_member_base<T>::operator[]
00085 (const internal::var_member_base<U> & m) const
00086 {
00087 return internal::var_member<var>(get_var(), m.get_var());
00088 }
00089
00090 template<typename T>
00091 internal::var_member<int> internal::var_member_base<T>::operator[](int m) const
00092 {
00093 return internal::var_member<int>(get_var(), m);
00094 }
00095
00096 template<typename T>
00097 internal::var_member<var> internal::var_member_base<T>::operator[](const var & m) const
00098 {
00099 return internal::var_member<var>(get_var(), m);
00100 }
00101
00102 template<typename Derived, typename DerefType>
00103 var var_methods<Derived,DerefType>::operator()() const
00104 { return deref().impl().call(); }
00105
00106 template<typename Derived, typename DerefType>
00107 var var_methods<Derived,DerefType>::operator()(const var & a0) const
00108 { return deref().impl().call(a0); }
00109
00110 template<typename Derived, typename DerefType>
00111 var var_methods<Derived,DerefType>::operator()(const var & a0, const var & a1) const
00112 { return deref().impl().call(a0, a1); }
00113
00114 template<typename Derived, typename DerefType>
00115 var var_methods<Derived,DerefType>::operator()(const var & a0, const var & a1, const var & a2) const
00116 { return deref().impl().call(a0, a1, a2); }
00117
00118 template<typename Derived, typename DerefType>
00119 var var_methods<Derived,DerefType>::operator()(const var & a0, const var & a1, const var & a2, const var & a3) const
00120 { return deref().impl().call(a0, a1, a2, a3); }
00121
00122 template<typename Derived, typename DerefType>
00123 var var_methods<Derived,DerefType>::operator()(const var & a0, const var & a1, const var & a2, const var & a3, const var & a4) const
00124 { return deref().impl().call(a0, a1, a2, a3, a4); }
00125
00126 template<typename Derived, typename DerefType>
00127 var var_methods<Derived,DerefType>::operator()(const var & a0, const var & a1, const var & a2, const var & a3, const var & a4, const var & a5) const
00128 { return deref().impl().call(a0, a1, a2, a3, a4, a5); }
00129
00130 template<typename Derived, typename DerefType>
00131 var var_methods<Derived,DerefType>::operator()(const var & a0, const var & a1, const var & a2, const var & a3, const var & a4, const var & a5, const var & a6) const
00132 { return deref().impl().call(a0, a1, a2, a3, a4, a5, a6); }
00133
00134 template<typename Derived, typename DerefType>
00135 var var_methods<Derived,DerefType>::operator()(const var & a0, const var & a1, const var & a2, const var & a3, const var & a4, const var & a5, const var & a6, const var & a7) const
00136 { return deref().impl().call(a0, a1, a2, a3, a4, a5, a6, a7); }
00137
00138 template<typename Derived, typename DerefType>
00139 var var_methods<Derived,DerefType>::operator()(const var & a0, const var & a1, const var & a2, const var & a3, const var & a4, const var & a5, const var & a6, const var & a7, const var & a8) const
00140 { return deref().impl().call(a0, a1, a2, a3, a4, a5, a6, a7, a8); }
00141
00142 template<typename Derived, typename DerefType>
00143 var var_methods<Derived,DerefType>::operator()(const var & a0, const var & a1, const var & a2, const var & a3, const var & a4, const var & a5, const var & a6, const var & a7, const var & a8, const var & a9) const
00144 { return deref().impl().call(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9); }
00145
00146 template<typename Derived, typename DerefType>
00147 std::string var_methods<Derived, DerefType>::class_name() const
00148 {
00149 return deref().impl().class_name();
00150 }
00151
00152 template<typename Derived, typename DerefType>
00153 var var_methods<Derived, DerefType>::keys() const
00154 {
00155 return deref().impl().keys();
00156 }
00157
00158 template<typename Derived, typename DerefType>
00159 var var_methods<Derived, DerefType>::values() const
00160 {
00161 return deref().impl().values();
00162 }
00163
00164 template<typename Derived, typename DerefType>
00165 int var_methods<Derived, DerefType>::max_args() const
00166 {
00167 return deref().impl().max_args();
00168 }
00169
00170 template<typename Derived, typename DerefType>
00171 var var_methods<Derived, DerefType>::proxy() const
00172 {
00173 return deref().impl().proxy();
00174 }
00175
00176 template<typename Derived, typename DerefType>
00177 var var_methods<Derived, DerefType>::enumerator() const
00178 {
00179 return deref().impl().enumerator();
00180 }
00181
00182 template<typename Derived, typename DerefType>
00183 var var_methods<Derived, DerefType>::reverse_enumerator() const
00184 {
00185 return deref().impl().reverse_enumerator();
00186 }
00187
00188 template<typename Derived,typename Deref>
00189 var var_methods<Derived,Deref>::clone() const
00190 {
00191 return deref().impl().clone();
00192 }
00193
00194 template<typename Derived,typename Deref>
00195 var var_methods<Derived,Deref>::begin() const
00196 {
00197 return deref().impl().begin();
00198 }
00199
00200 template<typename Derived,typename Deref>
00201 var var_methods<Derived,Deref>::end() const
00202 {
00203 return deref().impl().end();
00204 }
00205
00206 template<typename Derived, typename Deref>
00207 var var_methods<Derived,Deref>::rbegin() const
00208 {
00209 return deref().impl().rbegin();
00210 }
00211
00212 template<typename Derived, typename Deref>
00213 var var_methods<Derived,Deref>::rend() const
00214 {
00215 return deref().impl().rend();
00216 }
00217
00218 template<typename Derived, typename Deref>
00219 int var_methods<Derived,Deref>::size() const
00220 {
00221 return deref().impl().size();
00222 }
00223
00224 template<typename Derived, typename Deref>
00225 void var_methods<Derived,Deref>::resize(const var & new_size)
00226 {
00227 return deref().impl().resize(new_size.as_int());
00228 }
00229
00230 template<typename Derived, typename Deref>
00231 bool var_methods<Derived,Deref>::empty() const
00232 {
00233 return deref().impl().empty();
00234 }
00235
00236 template<typename Derived, typename Deref>
00237 void var_methods<Derived,Deref>::clear()
00238 {
00239 deref().impl().clear();
00240 }
00241
00242 template<typename Derived, typename Deref>
00243 void var_methods<Derived,Deref>::push_back(const var & t)
00244 {
00245 deref().impl().push_back(t);
00246 }
00247
00248 template<typename Derived, typename Deref>
00249 var var_methods<Derived,Deref>::pop_back()
00250 {
00251 return deref().impl().pop_back();
00252 }
00253
00254 template<typename Derived, typename Deref>
00255 void var_methods<Derived,Deref>::push_front(const var & t)
00256 {
00257 deref().impl().push_front(t);
00258 }
00259
00260 template<typename Derived, typename Deref>
00261 var var_methods<Derived,Deref>::pop_front()
00262 {
00263 return deref().impl().pop_front();
00264 }
00265
00266 template<typename Derived, typename Deref>
00267 var var_methods<Derived,Deref>::front() const
00268 {
00269 return deref().impl().front();
00270 }
00271
00272 template<typename Derived, typename Deref>
00273 var var_methods<Derived,Deref>::back() const
00274 {
00275 return deref().impl().back();
00276 }
00277
00278 template<typename Derived, typename Deref>
00279 void var_methods<Derived,Deref>::insert(const var & t)
00280 {
00281 deref().impl().insert(t);
00282 }
00283
00284 template<typename Derived, typename Deref>
00285 void var_methods<Derived,Deref>::insert(const var & t, const var & u)
00286 {
00287 deref().impl().insert(t,u);
00288 }
00289
00290 template<typename Derived, typename Deref>
00291 var var_methods<Derived,Deref>::key() const
00292 {
00293 return deref().impl().key();
00294 }
00295
00296 template<typename Derived, typename Deref>
00297 var var_methods<Derived,Deref>::value() const
00298 {
00299 return deref().impl().value();
00300 }
00301
00302 template<typename Derived, typename Deref>
00303 bool var_methods<Derived,Deref>::contains(const var & t) const
00304 {
00305 return deref().impl().contains(t);
00306 }
00307
00308 template<typename Derived, typename Deref>
00309 void var_methods<Derived,Deref>::erase(const var & t)
00310 {
00311 deref().impl().erase(t);
00312 }
00313
00314 template<typename Derived, typename Deref>
00315 void var_methods<Derived,Deref>::mixin(const var & t)
00316 {
00317 deref().impl().mixin(t);
00318 }
00319
00320 template<typename Derived, typename Deref>
00321 var var_methods<Derived,Deref>::operator++(int)
00322 {
00323 var tmp = deref().impl().clone();
00324 deref().impl().op_inc();
00325 return tmp;
00326 }
00327
00328 template<typename Derived, typename Deref>
00329 var var_methods<Derived,Deref>::operator--(int)
00330 {
00331 var tmp = deref().impl().clone();
00332 deref().impl().op_dec();
00333 return tmp;
00334 }
00335
00336 template<typename Derived, typename Deref>
00337 var var_methods<Derived,Deref>::operator*()const
00338 {
00339 return deref().impl().deref();
00340 }
00341
00342 template<typename Derived, typename Deref>
00343 internal::var_deref var_methods<Derived,Deref>::operator->() const
00344 {
00345 return deref().impl().deref();
00346 }
00347
00348 template<typename Derived, typename Deref>
00349 var var_methods<Derived,Deref>::operator+() const
00350 {
00351 return deref().impl().op_pos();
00352 }
00353
00354 template<typename Derived, typename Deref>
00355 var var_methods<Derived,Deref>::operator~() const
00356 {
00357 return deref().impl().op_inv();
00358 }
00359
00360 template<typename Derived, typename Deref>
00361 var var_methods<Derived,Deref>::operator-() const
00362 {
00363 return deref().impl().op_neg();
00364 }
00365
00366 template<typename Derived,typename Deref>
00367 string var_methods<Derived,Deref>::as_string() const
00368 {
00369 return to_string(deref());
00370 }
00371
00372 template<typename Derived,typename Deref>
00373 wstring var_methods<Derived,Deref>::as_wstring() const
00374 {
00375 return to_wstring(deref());
00376 }
00377 }
00378 }