// Copyright (C) 1996 DIMACS Center, Rutgers, The State University of New Jersey
// Author(s): ??

// This software is copyrighted by the DIMACS Center at Rutgers, The State
// University of New Jersey.  IT IS PROVIDED AS IS, AND THE AUTHORS, DIMACS, AND
// RUTGERS, THE STATE UNIVERSITY OF NEW JERSEY  DISCLAIM
// ALL LIABILITY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
// DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY
// DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.

// THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES,
// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.  THIS SOFTWARE
// IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE
// NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
// MODIFICATIONS.

// The authors hereby grant permission to use, copy, modify, distribute,
// and license this software and its documentation for any purpose, provided
// that existing copyright notices are retained in all copies and that this
// notice is included verbatim in any distributions. No written agreement,
// license, or royalty fee is required for any of the authorized uses.
// Modifications to this software may be copyrighted by their authors
// and need not follow the licensing terms described here, provided that
// the new terms are clearly indicated on the first page of each file where
// they apply.

// Last File Update: 31-Jul-1996
// 


// -------------------------------------------
// ------------ stdtypes.h -------------------
// -------------------------------------------

#ifndef _stdtypes_h
#define _stdtypes_h

// This should be the only include of assert.h in the system?.
//
#include "assert.h"

/*
 * TYPE CONVENTIONS:
 *
 * Class names: (1) Begin with a upper case letter
 *              (2) No underscore characters (unless private subclass)
 *		(3)
 *
 * Typedefs: (1) Begin with a lower case letter for syntactic sugar types.
 *               (ushort, bool, vertNum, etc.)
 *           (2) Class or application specific types should start with 
 *		 an uppercase and/or read as a type. (IntArray, etc.)
 *
 * Preprocessor stuff:  (1) Heavy on the caps (e.g., STRMAX, XFUNCPROTO)
 *                      (2) Begin with double underscore (e.g., __graph)
 *			    [ _graph_h is also acceptable. ]
 *
 * Variable names:
 *  (a) local:		Author's choice?
 *  (b) global:		Try to avoid.  Name to signify globalness.
 *  (c) private:        Begin with underscore.
 *  (d) public:    	Shouldn't ever be any!  see (1) below
 *  (e) protected: 	No underscore.
 *  (f)
 *
 */
// (1) a little more work, but it's better to do
//   private: 
//      int _foo;
//   public:
//      void foo( int i ) { _foo = i; }
//      int foo() { return _foo; }
//  Much easier in the long run, for inserting assertions or whatever.

//typedef	char	bool;

typedef unsigned int	uint;
typedef unsigned char	uchar;
typedef unsigned long	ulong;
typedef unsigned short	ushort;

// iostream defines
//
const char nl = '\n';
const char tab = '\t';
const char bell = '\7';

// binary io 
//
//#define NOBINARYIO 
#ifndef NOBINARYIO
#define _io_declarations( aClass )					\
   friend class ostream& operator<<( ostream&, const aClass& );		\
   friend class istream& operator>>( istream&, aClass& );		\
   friend class bostream& operator<<( bostream&, const aClass& );	\
   friend class bistream& operator>>( bistream&, aClass& );
#else
#define _io_declarations( aClass )					\
   friend class ostream& operator<<( ostream&, const aClass& );
#endif

// Warning! Only use to cast a reference to a reference to a base class.
//
#define CAST( anObject, aClass ) ( (aClass&) anObject )

#endif

