// -*- C++ -*- //

#ifndef LEMON_DEBUG_H
#define LEMON_DEBUG_H

//! \file
//! \brief Basic definitions for debug control.

namespace lemon {

  //! Debug mode for testing/debugging

  //! Use this debug mode if you want exhaustive range and consistency checks.
  //! It also produces verbose debug messages.
  struct DebugOn {
    //! Example: check whether the edges added to a path are adjacent
    static const bool consistensy_check = true;

    static const bool range_check = true;

    //! Examples: initialize maps with some value;
    //! after deleting an item from UnionFindEnum set its value in the
    //! corresponding map to NULL...
    static const bool ensure_safe_state = true;

    static const int verbose = 5;
  };

  //! Debug mode for turning off debug aids.

  //! This debud mode switches off all range and consistency checks,
  //! as well as the debug messages.
  //!
  struct DebugOff {
    static const bool consistensy_check = false;
    static const bool range_check = false;
    static const bool ensure_safe_state = false;
    static const int verbose = 0;
  };

#ifdef DEBUG
  //! The default debug mode.

  //! The default debug mode.
  //!
  typedef DebugOn DefaultDebugMode;
#else
  //! The default debug mode. 

  //! The default debug mode. 
  //!
  typedef DebugOff DefaultDebugMode;
#endif

}
#endif // LEMON_DEBUG_H
