blob: 1db4aa4e719ea1cfcbba9b4040d8d3e53badb4b3 [file] [log] [blame]
Enrico Granataab8674f2012-03-17 02:02:03 +00001typedef unsigned int uint32_t;
2
Kate Stoneb9c1b512016-09-06 20:57:50 +00003enum MaskingOperator {
4 eMaskingOperatorDefault = 0,
5 eMaskingOperatorAnd = 1,
6 eMaskingOperatorOr = 2,
7 eMaskingOperatorXor = 3,
8 eMaskingOperatorNand = 4,
9 eMaskingOperatorNor = 5
Enrico Granataab8674f2012-03-17 02:02:03 +000010};
11
Kate Stoneb9c1b512016-09-06 20:57:50 +000012class MaskedData {
Enrico Granataab8674f2012-03-17 02:02:03 +000013private:
Kate Stoneb9c1b512016-09-06 20:57:50 +000014 uint32_t value;
15 uint32_t mask;
16 MaskingOperator oper;
17
Enrico Granataab8674f2012-03-17 02:02:03 +000018public:
Kate Stoneb9c1b512016-09-06 20:57:50 +000019 MaskedData(uint32_t V = 0, uint32_t M = 0,
20 MaskingOperator P = eMaskingOperatorDefault)
21 : value(V), mask(M), oper(P) {}
22
23 uint32_t apply() {
24 switch (oper) {
25 case eMaskingOperatorAnd:
26 return value & mask;
27 case eMaskingOperatorOr:
28 return value | mask;
29 case eMaskingOperatorXor:
30 return value ^ mask;
31 case eMaskingOperatorNand:
32 return ~(value & mask);
33 case eMaskingOperatorNor:
34 return ~(value | mask);
35 case eMaskingOperatorDefault: // fall through
36 default:
37 return value;
38 }
39 }
40
41 void setValue(uint32_t V) { value = V; }
42
43 void setMask(uint32_t M) { mask = M; }
44
45 void setOperator(MaskingOperator P) { oper = P; }
Enrico Granataab8674f2012-03-17 02:02:03 +000046};
47
Kate Stoneb9c1b512016-09-06 20:57:50 +000048int main() {
49 MaskedData data_1(0xFF0F, 0xA01F, eMaskingOperatorAnd);
50 MaskedData data_2(data_1.apply(), 0x1AFC, eMaskingOperatorXor);
51 MaskedData data_3(data_2.apply(), 0xFFCF, eMaskingOperatorOr);
52 MaskedData data_4(data_3.apply(), 0xAABC, eMaskingOperatorAnd);
53 MaskedData data_5(data_4.apply(), 0xFFAC, eMaskingOperatorNor);
54 MaskedData data_6(data_5.apply(), 0x0000BEEF, eMaskingOperatorAnd);
55 return data_6.apply(); // <-- what comes out of here?
Enrico Granataab8674f2012-03-17 02:02:03 +000056}