ECInvariantChecker.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /*
  2. * Copyright 2005 - 2016 Zarafa and its licensors
  3. *
  4. * This program is free software: you can redistribute it and/or modify
  5. * it under the terms of the GNU Affero General Public License, version 3,
  6. * as published by the Free Software Foundation.
  7. *
  8. * This program is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. * GNU Affero General Public License for more details.
  12. *
  13. * You should have received a copy of the GNU Affero General Public License
  14. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  15. *
  16. */
  17. #ifndef ECInvariantChecker_INCLUDED
  18. #define ECInvariantChecker_INCLUDED
  19. #include <kopano/zcdefs.h>
  20. namespace KC {
  21. template<typename Type> class ECInvariantChecker _kc_final {
  22. public:
  23. ECInvariantChecker(const Type *p): m_p(p) { m_p->CheckInvariant(); }
  24. ~ECInvariantChecker() { m_p->CheckInvariant(); }
  25. private:
  26. const Type *m_p;
  27. };
  28. #ifdef DEBUG
  29. #define DEBUG_CHECK_INVARIANT do { this->CheckInvariant(); } while (false)
  30. #define DEBUG_GUARD guard __g(this);
  31. #else
  32. #define DEBUG_CHECK_INVARIANT do { } while (false)
  33. #define DEBUG_GUARD
  34. #endif
  35. #define DECL_INVARIANT_GUARD(__class) typedef ECInvariantChecker<__class> guard;
  36. #define DECL_INVARIANT_CHECK void CheckInvariant() const;
  37. #define DEF_INVARIANT_CHECK(__class) void __class::CheckInvariant() const
  38. } /* namespace */
  39. #endif // ndef ECInvariantChecker_INCLUDED