avr39-ripe

BitField

Jun 3rd, 2019
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.07 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. enum Flags
  4. {
  5.     Flag1 = 1u,
  6.     Flag2 = 2u,
  7.     Flag3 = 4u,
  8.     Flag4 = 8u,
  9.     Flag5 = 16u,
  10.     Flag6 = 32u,
  11.     Flag7 = 64u,
  12.     Flag8 = 128u,
  13. };
  14.  
  15. struct BitFlag
  16. {
  17.     uint8_t flag = 0;
  18.     void set(uint8_t flagNum, uint8_t value)
  19.     {
  20.         value ? flag |= flagNum : flag &= ~(flagNum);
  21.     };
  22.     int get(uint8_t flagNum)
  23.     {
  24.         return flag & flagNum ? 1 : 0;
  25.     };
  26.     static int numToFlag(uint8_t num)
  27.     {
  28.         return 1 << (num);
  29.     };
  30.     void print()
  31.     {
  32.         for (int i = 0; i < 8; i++)
  33.         {
  34.             std::cout << "Flag" << i + 1 << " : " << get(numToFlag(i)) << '\n';
  35.         }
  36.  
  37.     }
  38. };
  39.  
  40. int main()
  41. {
  42.     BitFlag myFlag;
  43.     myFlag.set(Flags::Flag5, 1);
  44.     myFlag.set(Flags::Flag8, 1);
  45.     myFlag.set(Flags::Flag1, 1);
  46.     myFlag.set(Flags::Flag4, 1);
  47.     myFlag.print();
  48.     std::cout << '\n';
  49.     myFlag.flag = 0; //Dirty hack! Do not do like that! :()
  50.     myFlag.set(Flags::Flag5 | Flags::Flag8 | Flags::Flag1 | Flags::Flag4, 1);
  51.     myFlag.print();
  52.     std::cout << '\n';
  53.     myFlag.set(Flags::Flag1, 0);
  54.     myFlag.set(Flags::Flag4, 0);
  55.     myFlag.set(Flags::Flag2, 1);
  56.     myFlag.set(Flags::Flag7, 1);
  57.     myFlag.print();
  58. };
Advertisement
Add Comment
Please, Sign In to add comment