std::vector QuantityFlag::flags_from_mask(unsigned int mask) { auto result = std::vector(); while (mask) { unsigned int new_mask = mask & (mask - 1); result.push_back(QuantityFlag::get( static_cast(mask ^ new_mask))); mask = new_mask; } return result; } unsigned int QuantityFlag::mask_from_flags(std::vector flags) { unsigned int result = 0; for (auto flag : flags) result |= flag->id(); return result; }