Exemplo n.º 1
0
      ScopedTemporaryFlagsChanger(Flags toFlags) {
        count_ = new int[MAXNUM];
        if (! count_) return;

        for (int i = 0;; ++i) {
          count_[i] = 0;

          ModifierFlag flag = getFlag(i);
          if (flag == ModifierFlag::NONE) break;

          // ----------------------------------------
          // reset flag
          while (! makeFlags().isOn(flag)) {
            temporary_increase(flag);
            ++count_[i];
          }
          while (makeFlags().isOn(flag)) {
            temporary_decrease(flag);
            --count_[i];
          }

          // ----------------------------------------
          // set a flag
          if (toFlags.isOn(flag)) {
            temporary_increase(flag);
            ++count_[i];
          }
        }
      }
Exemplo n.º 2
0
      ~ScopedTemporaryFlagsChanger(void) {
        if (! count_) return;

        for (int i = 0;; ++i) {
          ModifierFlag flag = getFlag(i);
          if (flag == ModifierFlag::NONE) break;

          if (count_[i] < 0) {
            while (count_[i] != 0) {
              temporary_increase(flag);
              ++count_[i];
            }
          } else if (count_[i] > 0) {
            while (count_[i] != 0) {
              temporary_decrease(flag);
              --count_[i];
            }
          }
        }

        delete[] count_;
      }
Exemplo n.º 3
0
 void temporary_increase(ModifierFlag flag) { temporary_increase(Flags(flag)); }