• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 typedef unsigned int uint32_t;
2 
3 enum MaskingOperator {
4   eMaskingOperatorDefault = 0,
5   eMaskingOperatorAnd = 1,
6   eMaskingOperatorOr = 2,
7   eMaskingOperatorXor = 3,
8   eMaskingOperatorNand = 4,
9   eMaskingOperatorNor = 5
10 };
11 
12 class MaskedData {
13 private:
14   uint32_t value;
15   uint32_t mask;
16   MaskingOperator oper;
17 
18 public:
MaskedData(uint32_t V=0,uint32_t M=0,MaskingOperator P=eMaskingOperatorDefault)19   MaskedData(uint32_t V = 0, uint32_t M = 0,
20              MaskingOperator P = eMaskingOperatorDefault)
21       : value(V), mask(M), oper(P) {}
22 
apply()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 
setValue(uint32_t V)41   void setValue(uint32_t V) { value = V; }
42 
setMask(uint32_t M)43   void setMask(uint32_t M) { mask = M; }
44 
setOperator(MaskingOperator P)45   void setOperator(MaskingOperator P) { oper = P; }
46 };
47 
main()48 int 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?
56 }
57