//////////////////////////////////////////////////////////////////////////////
//
// File: debug.h
//
// Purpose: Interface for Debug class.
//          This helps me debug my other classes.
//
// Authors:
//   txe  Travis Emmitt
//
// Modifications:
//   17-APR-1998  txe  Initial creation
//   18-APR-1998  txe  Added Peek(), peek_watch, comments
//   19-APR-1998  txe  Added constructor, destructor
//   20-APR-1998  txe  Moved DEBUG() related macros here
//   23-APR-1998  txe  Added SCH debug level, made debug static
//
//////////////////////////////////////////////////////////////////////////////

#ifndef DEBUG_H
#define DEBUG_H

#include <iostream.h>

#define NAME_LEN	30

#define DEBUG(a)    if (debug >= a) cout
#define ERR         cout << "\nError: "
#define WARN        cout << "\nWarning: "

#ifdef NO_DEBUG
#define ASSERT(x)   ;
#else
#define ASSERT(x)   { cout.flush(); assert(x); }
#endif

#define DEL	    3	// debug level for object deletions
#define MUT         0	// debug level for mutations
#define NEW	    3	// debug level for object creations
#define SCH         0   // debug level for school-related operations

#ifndef STATIC_WORKS

#ifdef MAIN_CC
int debug;
#else
extern int debug;
#endif

#endif

///////////////////////////////////////////////////////////////////////////////

class Debug {
public:
#ifdef STATIC_WORKS
  static int debug;                      // debugging level
#endif
  char name[NAME_LEN+1];                 // object's name
  int  peek_watch;                       // if true, notify user of events
  
  Debug ();
  Debug (char *name);
  ~Debug ();
  virtual char *GetName  ();             // returns string representation
  virtual void  Peek     ();             // lets user peek into our state
  virtual void  Print    ();             // prints select info about state
  virtual void  Print    (int debug);    // ditto, with debug level
  virtual void  SetName  ();             // set our name
  virtual void  SetName  (char *name);   // set our name to string
};

#endif

///////////////////////////////////////////////////////////////////////////////


