typedef unsigned int uint32_t; enum MaskingOperator { eMaskingOperatorDefault = 0, eMaskingOperatorAnd = 1, eMaskingOperatorOr = 2, eMaskingOperatorXor = 3, eMaskingOperatorNand = 4, eMaskingOperatorNor = 5 }; class MaskedData { private: uint32_t value; uint32_t mask; MaskingOperator oper; public: MaskedData(uint32_t V = 0, uint32_t M = 0, MaskingOperator P = eMaskingOperatorDefault) : value(V), mask(M), oper(P) {} uint32_t apply() { switch (oper) { case eMaskingOperatorAnd: return value & mask; case eMaskingOperatorOr: return value | mask; case eMaskingOperatorXor: return value ^ mask; case eMaskingOperatorNand: return ~(value & mask); case eMaskingOperatorNor: return ~(value | mask); case eMaskingOperatorDefault: // fall through default: return value; } } void setValue(uint32_t V) { value = V; } void setMask(uint32_t M) { mask = M; } void setOperator(MaskingOperator P) { oper = P; } }; int main() { MaskedData data_1(0xFF0F, 0xA01F, eMaskingOperatorAnd); MaskedData data_2(data_1.apply(), 0x1AFC, eMaskingOperatorXor); MaskedData data_3(data_2.apply(), 0xFFCF, eMaskingOperatorOr); MaskedData data_4(data_3.apply(), 0xAABC, eMaskingOperatorAnd); MaskedData data_5(data_4.apply(), 0xFFAC, eMaskingOperatorNor); MaskedData data_6(data_5.apply(), 0x0000BEEF, eMaskingOperatorAnd); return data_6.apply(); // <-- what comes out of here? }