acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
enum.h
1#pragma once
2
3
4//#include "acme/prototype/mathematics/c_number.h"
5
6
7template < class EENUM, EENUM edefault >
8class base_enum
9{
10public:
11
12
13 EENUM m_evalue;
14
15
16 const static EENUM m_edefault = edefault;
17
18 base_enum();
19 base_enum(const base_enum < EENUM, edefault> & evalue);
20 base_enum(const wparam & wparam) :m_evalue((EENUM)wparam.m_wparam){}
21 base_enum(::i64 i) :m_evalue((EENUM)i) {}
22 base_enum(EENUM evalue);
23 base_enum(::i32 i);
24 virtual ~base_enum();
25
26 void DefaultConstruct();
27
28 const base_enum <EENUM, edefault> & operator = (::i32 i) { return operator =((EENUM)i); }
29 const base_enum <EENUM, edefault> & operator = (::i64 i) { return operator =((EENUM)i); }
30 const base_enum <EENUM, edefault> & operator = (const wparam & wparam) { return operator =((EENUM) wparam.m_wparam); }
31
32 const base_enum <EENUM, edefault> & operator = (EENUM evalue);
33 const base_enum <EENUM, edefault> & operator &= (EENUM evalue);
34 const base_enum <EENUM, edefault> & operator |= (EENUM evalue);
35
36 const base_enum <EENUM, edefault> & operator = (const base_enum < EENUM, edefault> & evalue);
37 const base_enum <EENUM, edefault> & operator &= (const base_enum < EENUM, edefault> & evalue);
38 const base_enum <EENUM, edefault> & operator |= (const base_enum < EENUM, edefault> & evalue);
39
40 bool operator == (const base_enum < EENUM, edefault> & evalue) const;
41 bool operator == (EENUM evalue) const;
42
43 base_enum & operator ++ (::i32) { m_evalue = (EENUM)(((::i32)m_evalue) + 1); return *this; }
44
45 operator EENUM() const;
46
47 //string get_name();
48 //void set_by_name(const ::scoped_string & scopedstr);
49
50};
51
52template <class EENUM, EENUM edefault>
53base_enum<EENUM, edefault>::base_enum()
54{
55 DefaultConstruct();
56}
57
58template <class EENUM, EENUM edefault>
59base_enum<EENUM, edefault>::base_enum(const base_enum < EENUM, edefault> & evalue)
60{
61 operator = (evalue);
62}
63
64template <class EENUM, EENUM edefault>
65base_enum<EENUM, edefault>::base_enum(EENUM evalue)
66{
67 m_evalue = evalue;
68}
69
70template <class EENUM, EENUM edefault>
71base_enum<EENUM, edefault>::base_enum(::i32 i)
72{
73 m_evalue = (EENUM) i;
74}
75
76template <class EENUM, EENUM edefault>
77base_enum<EENUM, edefault>::~base_enum()
78{
79}
80
81template <class EENUM, EENUM edefault>
82void base_enum<EENUM, edefault>::DefaultConstruct()
83{
84 m_evalue = edefault;
85}
86
87template <class EENUM, EENUM edefault>
89{
90 m_evalue = evalue;
91 return *this;
92}
93
94template <class EENUM, EENUM edefault>
96{
97 m_evalue = (EENUM) (m_evalue & evalue);
98 return *this;
99}
100
101template <class EENUM, EENUM edefault>
103{
104 m_evalue = (EENUM) (m_evalue | evalue);
105 return *this;
106}
107
108template <class EENUM, EENUM edefault>
109const base_enum<EENUM, edefault> & base_enum<EENUM, edefault>::operator = (const base_enum < EENUM, edefault> & evalue)
110{
111 m_evalue = evalue.m_evalue;
112 return *this;
113}
114
115template <class EENUM, EENUM edefault>
116const base_enum<EENUM, edefault> & base_enum<EENUM, edefault>::operator &= (const base_enum < EENUM, edefault> & evalue)
117{
118 m_evalue = (EENUM) (m_evalue & evalue.m_evalue);
119 return *this;
120}
121
122template <class EENUM, EENUM edefault>
123const base_enum<EENUM, edefault> & base_enum<EENUM, edefault>::operator |= (const base_enum < EENUM, edefault> & evalue)
124{
125 m_evalue = (EENUM)(m_evalue | evalue.m_evalue);
126 return *this;
127}
128
129template <class EENUM, EENUM edefault>
130bool base_enum<EENUM, edefault>::operator == (const base_enum < EENUM, edefault> & evalue) const
131{
132 return m_evalue == evalue.m_evalue;
133}
134
135template <class EENUM, EENUM edefault>
136bool base_enum<EENUM, edefault>::operator == (EENUM evalue) const
137{
138 return m_evalue == evalue;
139}
140
141template <class EENUM, EENUM edefault>
143{
144 return m_evalue;
145}
146
147/*template <class EENUM, EENUM edefault>
148string
149base_enum<EENUM, edefault>::get_name()
150{
151 return get_name(m_evalue);
152}
153
154template <class EENUM, EENUM edefault>
155void
156base_enum<EENUM, edefault>::
157set_by_name(const ::scoped_string & scopedstr)
158{
159 m_evalue = from_name(scopedstr, edefault);
160}*/
161
Definition base_enum.h:24