// file: $isip/class/system/Integral/IntegralTypes.h
// version: $Id: IntegralTypes.h 10641 2007-01-27 06:03:30Z tm334 $
//

// system include file
//
#define __lint
#include <wctype.h>

// this is the basic isip environment include file. all Integral types
// are defined in this file. these are also implemented as C++ classes.
// all software must be built upon these basic types.
//
// these definitions follow a format in which the data type is related
// to particular machine defined formats. 

// this file is for internal use only
//
#ifdef ISIP_INTERNAL_USE_ONLY

// make sure definitions are only made once
// follow the standard isip convention in defining the symbol to be
// used to signal the preprocessor
//
#ifndef ISIP_INTEGRAL_TYPES
#define ISIP_INTEGRAL_TYPES

// we include the complex number class so we can define complex number integral
// types
//
#ifndef ISIP_SYS_COMPLEX
#include <SysComplex.h>
#endif

// Integral type #1: boolean or boolean variables
//
typedef bool boolean;

// Integral type #2: a single byte of data
//
typedef unsigned char ubyte;
typedef ubyte byte;
typedef signed char sbyte;

// Integral type #3: a character
//
// a character object is a multi-byte unicode index number. in order
// to support unicode in our environment, the classes SysChar and
// SysString exist at the lowest levels (the system library) with
// automatic conversions for both standard C strings (7-bit
// characters) and other standard encoding schemes.
//
typedef wchar_t unichar;

// Integral type #4: an unsigned integer
//
typedef unsigned short int ushort;
typedef unsigned long int ulong;
typedef unsigned long long int ullong;

// Integral type #5: a signed integer
//
// since our name-space conflicts with standard C, we do not actually
// make a typedef. these lines are included in this file as a
// reference for the programmer of the base classes.
//
//typedef short int short;
//typedef long int long;
typedef long slong;
typedef long long int llong;
typedef llong sllong;
typedef short sint;

// Integral type #6: a real floating point number
//
// since our namespace conflicts with standard C, we do not actually
// make a typedef. these lines are included in this file as a
// reference for the programmer of the base classes.
//
//typedef float float;
//typedef double double;

// Integral type #7: a complex number
//
typedef SysComplex<float> complexfloat;
typedef SysComplex<double> complexdouble;
typedef SysComplex<long> complexlong;

// the above types do not specify sizes, but there are minimum
// guarantees based around a 32 bit architecture model. a short
// integer will be at least 16 bits, long 32 bits, llong 64 bits. a
// float will be at least 32 bits, a double at least 64 bits. any data
// in excess of these limits will not be preserved thorough file
// i/o. these integral types will not have corresponding scalar
// classes and will not be included in more complex data types, or
// used in any manner except i/o or possibly fixed point. it is the
// programmers responsibility to convert data from these size specific
// data types to the more general standard integral types listed above
// before processing.
//
typedef unsigned char byte8;
typedef unsigned short int uint16;
typedef unsigned long int uint32;
typedef unsigned long long int uint64;
typedef short int int16;
typedef long int int32;
typedef long long int int64;
typedef float float32;
typedef double float64;

// end of include file
//
#endif
#endif

