 |
Gorgon Game Engine
|
Go to the documentation of this file.
29 template<
class C_,
class T_, T_(C_::*Getter_)() const = &C_::get,
void(C_::*Setter_)(const T_ &) = &C_::set>
52 return (
Object.*Getter_)();
55 operator const T_()
const {
56 return (
Object.*Getter_)();
60 return (
Object.*Getter_)();
63 void Set(
const T_ &value) {
81 return (
Object.*Getter_)();
84 template <
class AC_, T_(AC_::*G_)() const,
void(AC_::*S_)(const T_ &)>
86 (
Object.*Setter_)((T_)prop);
92 return (
Object.*Getter_)()==v;
96 return (
Object.*Getter_)()!=v;
107 template<
class C_,
class T_, T_(C_::*Getter_)() const,
void(C_::*Setter_)(const T_ &)>
124 (this->
Object.*Setter_)(value);
135 template<
class AC_,
class O_, O_(C_::*G_)() const,
void(C_::*S_)(const O_ &)>
137 (this->
Object.*Setter_)((T_)(O_)prop);
143 T_ v=(this->
Object.*Getter_)();
146 (this->
Object.*Setter_)(k);
151 T_ v=(this->
Object.*Getter_)();
154 (this->
Object.*Setter_)(k);
159 T_ v=(this->
Object.*Getter_)();
161 (this->
Object.*Setter_)(v);
166 T_ v=(this->
Object.*Getter_)();
168 (this->
Object.*Setter_)(v);
173 return (this->
Object.*Getter_)() + v;
177 return (this->
Object.*Getter_)() - v;
181 return (this->
Object.*Getter_)() * v;
185 return (this->
Object.*Getter_)() / v;
190 return (this->
Object.*Getter_)();
195 return (this->
Object.*Getter_)();
201 return (this->
Object.*Getter_)();
207 return (this->
Object.*Getter_)();
211 return (this->
Object.*Getter_)()>v;
215 return (this->
Object.*Getter_)()<v;
219 return (this->
Object.*Getter_)()>=v;
223 return (this->
Object.*Getter_)()<=v;
229 template<
class C_,
class T_, T_(C_::*Getter_)() const,
void(C_::*Setter_)(const T_ &)>
246 (this->
Object.*Setter_)(value);
251 template <
class AC_,
class O_, O_(C_::*G_)() const,
void(C_::*S_)(const O_ &)>
253 (this->
Object.*Setter_)((T_)(O_)prop);
259 return (this->
Object.*Getter_)() && v;
263 return (this->
Object.*Getter_)() || v;
267 return !(this->
Object.*Getter_)();
274 template<
class C_,
class T_, T_(C_::*Getter_)() const,
void(C_::*Setter_)(const T_ &)>
291 (this->
Object.*Setter_)(T_(value));
296 template <
class AC_, T_(AC_::*G_)() const,
void(AC_::*S_)(const T_ &)>
298 (this->
Object.*Setter_)((T_)prop);
305 return (this->
Object.*Getter_)();
310 return (this->
Object.*Getter_)();
315 return (this->
Object.*Getter_)();
322 template<
class C_,
class T_, T_&(C_::*Getter_)() const,
void(C_::*Setter_)(T_ &)>
339 (this->
Object.*Setter_)(value);
344 template <
class AC_, T_&(C_::*G_)() const,
void(C_::*S_)(const T_ &)>
346 (this->
Object.*Setter_)(
dynamic_cast<T_&
>(prop));
352 return (this->
Object.*Getter_)();
356 return &(this->
Object.*Getter_)();
363 class ReferencePropertyWatch;
366 class ObjectPropertyWatch;
376 template<
class C_,
class T_, T_(C_::*Getter_)() const,
void(C_::*Setter_)(const T_ &)>
393 (this->
Object.*Setter_)(value);
398 template <
class AC_, T_(C_::*G_)() const,
void(C_::*S_)(const T_ &)>
400 (this->
Object.*Setter_)((T_)prop);
406 return (this->
Object.*Getter_)();
410 return (this->
Object.*Getter_)();
413 internal::ObjectPropertyWatch<MutableObjectProperty<C_, T_, Getter_, Setter_>>
operator ->();
416 return &(this->
Object.*Getter_)();
425 template<
class C_,
class T_, T_ *(C_::*Getter_)() const,
void(C_::*Setter_)(T_ *),
void(C_::*Update_)()>
446 return (this->Object.*Getter_)();
449 operator T_ &()
const {
450 return (this->Object.*Getter_)();
454 (this->Object.*Setter_)(value);
460 (this->Object.*Setter_)(&value);
467 return (this->Object.*Getter_)()==&v;
472 return (this->Object.*Getter_)()!=&v;
477 return (this->Object.*Getter_)()==v;
482 return (this->Object.*Getter_)()!=v;
486 (this->Object.*Update_)();
489 internal::ReferencePropertyWatch<ReferenceProperty<C_, T_, Getter_, Setter_, Update_>>
operator ->();
492 return (this->Object.*Getter_)();
496 return (this->Object.*Getter_)();
500 T_ *o=(this->Object.*Getter_)();
504 throw std::runtime_error(
"Property is empty");
511 class ReferencePropertyWatch {
513 ReferencePropertyWatch(T_ *obj) : obj(obj) {}
515 ~ReferencePropertyWatch() {
519 auto operator ->()
const {
520 return obj->GetPtr();
528 class ObjectPropertyWatch {
530 ObjectPropertyWatch(T_ *obj) : obj(obj) {
534 ~ObjectPropertyWatch() {
538 auto &operator ->()
const {
550 template<
class C_,
class T_, T_(C_::*Getter_)() const,
void(C_::*Setter_)(const T_ &)>
555 template<
class C_,
class T_, T_ *(C_::*Getter_)() const,
void(C_::*Setter_)(T_ *),
void(C_::*Update_)()>
561 template<
class C_,
class T_, T_(C_::*Getter_)() const,
void(C_::*Setter_)(const T_ &)>
576 (this->
Object.*Setter_)(T_(value));
581 template <
class AC_, T_(C_::*G_)() const,
void(C_::*S_)(const T_ &)>
583 (this->
Object.*Setter_)((T_)prop);
589 return (this->
Object.*Setter_)((this->
Object.*Getter_)()+v);
600 T_
substr(
typename T_::size_type off=0
U,
typename T_::size_type len=T_::npos)
const {
604 typename T_::size_type
find (
const T_& str,
typename T_::size_type pos = 0 )
const {
605 return (this->
Object.*Getter_)().
find(str, pos);
607 typename T_::size_type
find (
const char* s,
typename T_::size_type pos,
typename T_::size_type n )
const {
608 return (this->
Object.*Getter_)().
find(s, pos, n);
610 typename T_::size_type
find (
const char* s,
typename T_::size_type pos = 0 )
const {
611 return (this->
Object.*Getter_)().
find(s, pos);
613 typename T_::size_type
find (
char c,
typename T_::size_type pos = 0 )
const {
614 return (this->
Object.*Getter_)().
find(c, pos);
617 typename T_::size_type
rfind (
const T_& str,
typename T_::size_type pos = T_::npos )
const {
620 typename T_::size_type
rfind (
const char* s,
typename T_::size_type pos,
typename T_::size_type n )
const {
623 typename T_::size_type
rfind (
const char* s,
typename T_::size_type pos = T_::npos )
const {
626 typename T_::size_type
rfind (
char c,
typename T_::size_type pos = T_::npos )
const {
630 typename T_::size_type
find_first_of (
const T_& str,
typename T_::size_type pos = T_::npos )
const {
633 typename T_::size_type
find_first_of (
const char* s,
typename T_::size_type pos,
typename T_::size_type n )
const {
636 typename T_::size_type
find_first_of (
const char* s,
typename T_::size_type pos = T_::npos )
const {
639 typename T_::size_type
find_first_of (
char c,
typename T_::size_type pos = T_::npos )
const {
643 typename T_::size_type
find_last_of (
const T_& str,
typename T_::size_type pos = T_::npos )
const {
646 typename T_::size_type
find_last_of (
const char* s,
typename T_::size_type pos,
typename T_::size_type n )
const {
649 typename T_::size_type
find_last_of (
const char* s,
typename T_::size_type pos = T_::npos )
const {
652 typename T_::size_type
find_last_of (
char c,
typename T_::size_type pos = T_::npos )
const {
656 typename T_::size_type
find_first_not_of (
const T_& str,
typename T_::size_type pos = T_::npos )
const {
659 typename T_::size_type
find_first_not_of (
const char* s,
typename T_::size_type pos,
typename T_::size_type n )
const {
662 typename T_::size_type
find_first_not_of (
const char* s,
typename T_::size_type pos = T_::npos )
const {
665 typename T_::size_type
find_first_not_of (
char c,
typename T_::size_type pos = T_::npos )
const {
669 typename T_::size_type
find_last_not_of (
const T_& str,
typename T_::size_type pos = T_::npos )
const {
672 typename T_::size_type
find_last_not_of (
const char* s,
typename T_::size_type pos,
typename T_::size_type n )
const {
675 typename T_::size_type
find_last_not_of (
const char* s,
typename T_::size_type pos = T_::npos )
const {
678 typename T_::size_type
find_last_not_of (
char c,
typename T_::size_type pos = T_::npos )
const {
683 return (this->
Object.*Getter_)()[pos];
687 T_ s=(this->
Object.*Getter_)();
689 (this->
Object.*Setter_)(s);
693 T_ s=(this->
Object.*Getter_)();
695 (this->
Object.*Setter_)(s);
701 T_ s=(this->
Object.*Getter_)();
703 (this->
Object.*Setter_)(s);
709 T_ s=(this->
Object.*Getter_)();
711 (this->
Object.*Setter_)(s);
717 T_ s=(this->
Object.*Getter_)();
719 (this->
Object.*Setter_)(s);
725 T_ s=(this->
Object.*Getter_)();
727 (this->
Object.*Setter_)(s);
732 template <
class InputIterator>
734 T_ s=(this->
Object.*Getter_)();
735 s.template append<InputIterator>(first, last);
736 (this->
Object.*Setter_)(s);
742 T_ s=(this->
Object.*Getter_)();
744 (this->
Object.*Setter_)(s);
750 T_ s=(this->
Object.*Getter_)();
752 (this->
Object.*Setter_)(s);
757 TextualProperty &
insert(
typename T_::size_type pos1,
const T_ str,
typename T_::size_type pos2,
typename T_::size_type n = T_::npos) {
758 T_ s=(this->
Object.*Getter_)();
759 s.
erase(pos1, str, pos2, n);
760 (this->
Object.*Setter_)(s);
766 T_ s=(this->
Object.*Getter_)();
768 (this->
Object.*Setter_)(s);
774 T_ s=(this->
Object.*Getter_)();
776 (this->
Object.*Setter_)(s);
782 T_ s=(this->
Object.*Getter_)();
784 (this->
Object.*Setter_)(s);
790 return (this->
Object.*Getter_)();
793 operator const T_()
const {
794 return (this->
Object.*Getter_)();
800 template<
class C_,
class T_, T_(C_::*Getter_)() const,
void(C_::*Setter_)(const T_ &)>
805 template<
class C_,
class T_, T_(C_::*Getter_)() const,
void(C_::*Setter_)(const T_ &)>
810 template<
class C_,
class T_, T_(C_::*Getter_)() const,
void(C_::*Setter_)(const T_ &)>
815 template<
class C_,
class T_, T_(C_::*Getter_)() const,
void(C_::*Setter_)(const T_ &)>
822 template <
class C_,
class T_, T_(C_::*G_)() const,
void(C_::*S_)(const T_ &)>
829 template <
class C_,
class T_, T_(C_::*G_)() const,
void(C_::*S_)(const T_ &)>
836 template <
class C_,
class T_, T_(C_::*G_)() const,
void(C_::*S_)(const T_ &)>
845 template <
class C_,
class T_, T_(C_::*G_)() const,
void(C_::*S_)(const T_ &)>
856 #define MAP_PROPERTY(type, name, variable) \
857 type get##name() const { return variable; } \
858 void set##name(const type &v) { variable=v; } \
864 #define PROPERTY_UPDATE(cls, proptype, type, name, def) \
866 type m_##name = def; \
868 type Get##name() const { return m_##name; } \
869 void Set##name(const type &value) { m_##name=value; Update(); } \
871 Gorgon::proptype##Property<cls, type, &cls::Get##name, &cls::Set##name> name = Gorgon::proptype##Property<cls, type, &cls::Get##name, &cls::Set##name>{this}
ObjectProperty(C_ &Object)
Definition: Property.h:330
TextualProperty & append(const char *str, typename T_::size_type n)
Definition: Property.h:708
TextualProperty & operator=(TextualProperty &&)=default
void Set(const T_ &value)
Definition: Property.h:63
TextualProperty & append(typename T_::size_type n, char c)
Definition: Property.h:724
T_::size_type find_first_of(char c, typename T_::size_type pos=T_::npos) const
Definition: Property.h:639
internal::ReferencePropertyWatch< ReferenceProperty< C_, T_, Getter_, Setter_, Update_ > > operator->()
Definition: Property.h:556
T_::size_type find(char c, typename T_::size_type pos=0) const
Definition: Property.h:613
NumericProperty(C_ &Object)
Definition: Property.h:115
ReferenceProperty(const ReferenceProperty &)=delete
T_ operator++()
Definition: Property.h:158
Object property allows the consumers of the property to be able to access object's member functions a...
Definition: Property.h:323
bool operator==(const T_ &v) const
Compares two objects, this performs reference comparison, not lexical.
Definition: Property.h:466
BinaryProperty(C_ *Object)
Definition: Property.h:279
Supports arithmetic operators including +, * ..., +=, ...
Definition: Property.h:108
NumericProperty(NumericProperty &&)=default
T_::size_type find_last_not_of(char c, typename T_::size_type pos=T_::npos) const
Definition: Property.h:678
T_::size_type rfind(const char *s, typename T_::size_type pos=T_::npos) const
Definition: Property.h:623
BinaryProperty & operator=(BinaryProperty &&)=default
BooleanProperty(C_ &Object)
Definition: Property.h:237
T_::size_type find_first_not_of(const T_ &str, typename T_::size_type pos=T_::npos) const
Definition: Property.h:656
const T_ & operator*() const
Definition: Property.h:351
T_ operator--()
Definition: Property.h:165
T_::size_type rfind(const char *s, typename T_::size_type pos, typename T_::size_type n) const
Definition: Property.h:620
C_ & Object
Definition: Property.h:428
TextualProperty(C_ *Object)
Definition: Property.h:564
T_::size_type find_last_not_of(const char *s, typename T_::size_type pos, typename T_::size_type n) const
Definition: Property.h:672
Supports logic operators.
Definition: Property.h:230
T_ operator|=(const T_ &v)
Definition: Property.h:303
Supports everything that string class supports including +, +=, length()
Definition: Property.h:562
T_::size_type find_first_of(const char *s, typename T_::size_type pos, typename T_::size_type n) const
Definition: Property.h:633
bool operator&&(const T_ &v) const
Definition: Property.h:258
TextualProperty(C_ &Object)
Definition: Property.h:567
TextualProperty(TextualProperty &&)=default
T_::size_type find_first_not_of(const char *s, typename T_::size_type pos, typename T_::size_type n) const
Definition: Property.h:659
bool operator<=(const T_ &v) const
Definition: Property.h:222
BooleanProperty(BooleanProperty &&)=default
T_ operator*() const
Definition: Property.h:80
T_ operator/(const T_ &v) const
Definition: Property.h:184
internal::ObjectPropertyWatch< MutableObjectProperty< C_, T_, Getter_, Setter_ > > operator->()
Definition: Property.h:551
T_::size_type find_first_of(const T_ &str, typename T_::size_type pos=T_::npos) const
Definition: Property.h:630
ObjectProperty(ObjectProperty &&)=default
T_::size_type find_last_not_of(const T_ &str, typename T_::size_type pos=T_::npos) const
Definition: Property.h:669
void Update()
Definition: Property.h:485
Object property allows the consumers of the property to be able to access objects member functions an...
Definition: Property.h:377
NumericProperty & operator=(NumericProperty &&)=default
void operator+=(const T_ &v)
Definition: Property.h:588
bool operator!() const
Definition: Property.h:266
ObjectProperty & operator=(ObjectProperty &&)=default
void clear()
Definition: Property.h:686
Root namespace for Gorgon Game Engine.
Definition: Any.h:19
TextualProperty & erase(typename T_::size_type pos=0, typename T_::size_type n=T_::npos)
Definition: Property.h:741
BooleanProperty(C_ *Object)
Definition: Property.h:234
BooleanProperty & operator=(BooleanProperty &&)=default
This is generic property that can be set and retrieved good for enums mostly, its ok to use with POD ...
Definition: Property.h:30
T_ & operator*()
Definition: Property.h:405
T_ & Get() const
Definition: Property.h:499
MutableObjectProperty(MutableObjectProperty &&)=default
ReferenceProperty(C_ *Object)
Definition: Property.h:433
std::istream & operator>>(std::istream &in, TextualProperty< C_, T_, G_, S_ > &p)
Definition: Property.h:837
const T_ * operator->() const
Definition: Property.h:355
NumericProperty(C_ *Object)
Definition: Property.h:112
TextualProperty & append(const T_ &str, typename T_::size_type pos, typename T_::size_type n)
Definition: Property.h:700
Property(Property &&)=default
TextualProperty & insert(typename T_::size_type pos, typename T_::size_type n, char c)
Definition: Property.h:781
Property & operator=(const Property &)=delete
T_ operator^=(const T_ &v)
Definition: Property.h:313
T_::size_type find_last_not_of(const char *s, typename T_::size_type pos=T_::npos) const
Definition: Property.h:675
T_ substr(typename T_::size_type off=0U, typename T_::size_type len=T_::npos) const
Definition: Property.h:600
T_::size_type find(const char *s, typename T_::size_type pos, typename T_::size_type n) const
Definition: Property.h:607
Property(C_ *Object)
Definition: Property.h:38
T_ operator+=(const T_ &v)
Definition: Property.h:188
T_::size_type find_first_of(const char *s, typename T_::size_type pos=T_::npos) const
Definition: Property.h:636
T_ operator+(TextualProperty< C_, T_, Setter_, Getter_ > &t, const T_ &v)
Definition: Property.h:801
C_ & Object
Definition: Property.h:35
T_::size_type length() const
Definition: Property.h:592
T_ operator-(const T_ &v) const
Definition: Property.h:176
T_ Type
Definition: Property.h:431
T_::size_type rfind(char c, typename T_::size_type pos=T_::npos) const
Definition: Property.h:626
bool operator<(const T_ &v) const
Definition: Property.h:214
const char & operator[](typename T_::size_type pos) const
Definition: Property.h:682
TextualProperty & insert(typename T_::size_type pos1, const T_ str, typename T_::size_type pos2, typename T_::size_type n=T_::npos)
Definition: Property.h:757
bool operator!=(const T_ &v) const
Definition: Property.h:95
contains type definitions for Gorgon system
bool operator!=(const T_ &v) const
Compares two objects, this performs reference comparison, not lexical.
Definition: Property.h:471
ReferenceProperty & operator=(const ReferenceProperty &)=delete
ReferenceProperty(C_ &Object)
Definition: Property.h:435
A regular drawable animation.
Definition: Animations.h:14
T_ * GetPtr() const
Definition: Property.h:495
bool operator>=(const T_ &v) const
Definition: Property.h:218
ObjectProperty(C_ *Object)
Definition: Property.h:327
MutableObjectProperty(C_ *Object)
Definition: Property.h:381
Type
Definition: Shader.h:14
std::ostream & operator<<(std::ostream &out, const TextualProperty< C_, T_, G_, S_ > &p)
Definition: Property.h:823
&Widget::getsize Type
Definition: Property.h:32
T_::size_type find_last_of(const char *s, typename T_::size_type pos=T_::npos) const
Definition: Property.h:649
ReferenceProperty(ReferenceProperty &&)=default
Property(const Property &)=delete
T_ operator/=(const O_ &v)
Definition: Property.h:205
const char * c_str() const
Definition: Property.h:596
T_ Get() const
Definition: Property.h:59
TextualProperty & insert(typename T_::size_type pos, const char *str)
Definition: Property.h:773
T_::size_type find_last_of(const T_ &str, typename T_::size_type pos=T_::npos) const
Definition: Property.h:643
Reference property allows clients to access a reference object within the class.
Definition: Property.h:426
MutableObjectProperty(C_ &Object)
Definition: Property.h:384
MutableObjectProperty & operator=(MutableObjectProperty &&)=default
BinaryProperty(C_ &Object)
Definition: Property.h:282
T_::size_type find_last_of(char c, typename T_::size_type pos=T_::npos) const
Definition: Property.h:652
TextualProperty & append(InputIterator first, InputIterator last)
Definition: Property.h:733
bool operator>(const T_ &v) const
Definition: Property.h:210
BinaryProperty(BinaryProperty &&)=default
T_::size_type find(const char *s, typename T_::size_type pos=0) const
Definition: Property.h:610
T_::size_type find_first_not_of(char c, typename T_::size_type pos=T_::npos) const
Definition: Property.h:665
T_ operator+(const T_ &v) const
Definition: Property.h:172
T_ operator-=(const T_ &v)
Definition: Property.h:193
bool operator||(const T_ &v) const
Definition: Property.h:262
bool operator==(const T_ &v) const
Definition: Property.h:91
Property(C_ &Object)
Definition: Property.h:41
TextualProperty & append(const char *str)
Definition: Property.h:716
T_::size_type find(const T_ &str, typename T_::size_type pos=0) const
Definition: Property.h:604
T_::size_type find_last_of(const char *s, typename T_::size_type pos, typename T_::size_type n) const
Definition: Property.h:646
T_ operator*=(const O_ &v)
Definition: Property.h:199
TextualProperty & insert(typename T_::size_type pos, const char *str, typename T_::size_type n)
Definition: Property.h:765
TextualProperty & insert(typename T_::size_type pos, const T_ str)
Definition: Property.h:749
TextualProperty & append(const T_ &str)
Definition: Property.h:692
T_::size_type rfind(const T_ &str, typename T_::size_type pos=T_::npos) const
Definition: Property.h:617
T_ operator&=(const T_ &v)
Definition: Property.h:308
Supports all operators that the numeric property supports.
Definition: Property.h:275
T_::size_type find_first_not_of(const char *s, typename T_::size_type pos=T_::npos) const
Definition: Property.h:662