avr39ripe

cppBitFlag

Jun 15th, 2021
503
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2.  
  3. enum Flags
  4. {
  5.     f1 = 1,     // 0b00000001
  6.     f2 = 2,     // 0b00000010
  7.     f3 = 4,     // 0b00000100
  8.     f4 = 8,     // 0b00001000
  9.     f5 = 16,    // 0b00010000
  10.     f6 = 32,    // 0b00100000
  11.     f7 = 64,    // 0b01000000
  12.     f8 = 128    // 0b10000000
  13. };
  14.  
  15. struct BitFlag
  16. {
  17.     uint8_t flag;
  18.     bool get(uint8_t flagP)
  19.     {
  20.         return (flag & flagP);
  21.     };
  22.  
  23.     void set(uint8_t flagP, bool val)
  24.     {
  25.         val ? flag |= flagP : flag &= ~(flagP);
  26.     }
  27.  
  28.     uint8_t numToFlag(uint8_t num)
  29.     {
  30.         return 1 << num;
  31.     }
  32.  
  33.     void print()
  34.     {
  35.         for (int i{ 0 }; i < 8; ++i)
  36.         {
  37.             std::cout << "Flag" << i + 1 << " : " << get(numToFlag(i)) << '\n';
  38.         }
  39.     }
  40. };
  41.  
  42. struct Features
  43. {
  44.     bool f1;
  45.     bool f2;
  46.     bool f3;
  47.     bool f4;
  48.     bool f5;
  49.     bool f6;
  50.     bool f7;
  51.     bool f8;
  52. };
  53.  
  54. int main()
  55. {
  56.     BitFlag myFlag;
  57.     myFlag.flag = 0;
  58.     //myFlag.flag = 0b10110101;
  59.        
  60.     //std::cout << "f6 is: " << myFlag.get(Flags::f6) << '\n'; //1
  61.     //std::cout << "f2 is: " << myFlag.get(Flags::f2) << '\n'; //0
  62.     //std::cout << "f3 is: " << myFlag.get(Flags::f3) << '\n'; //1
  63.     //std::cout << '\n';
  64.     myFlag.print();
  65.     std::cout << '\n';
  66.     myFlag.set(Flags::f3, true);
  67.     myFlag.set(Flags::f3, false);
  68.     myFlag.set(Flags::f7, false);
  69.     myFlag.set(Flags::f1, true);
  70.     myFlag.set(Flags::f5, true);
  71.  
  72.     myFlag.set(Flags::f3 | Flags::f2 | Flags::f6, true);
  73.     myFlag.print();
  74.     std::cout << '\n';
  75.     myFlag.set(Flags::f7 | Flags::f2 | Flags::f1, false);
  76.     myFlag.print();
  77. }
RAW Paste Data