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? }