home *** CD-ROM | disk | FTP | other *** search
/ The Devil's Doorknob BBS Capture (1996-2003) / devilsdoorknobbbscapture1996-2003.iso / Dloads / OTHERUTI / TCPP30-1.ZIP / CLASSINC.ZIP / OBJECT.H < prev    next >
C/C++ Source or Header  |  1992-02-18  |  4KB  |  153 lines

  1. /*------------------------------------------------------------------------*/
  2. /*                                                                        */
  3. /*  OBJECT.H                                                              */
  4. /*                                                                        */
  5. /*  Copyright Borland International 1991                                  */
  6. /*  All Rights Reserved                                                   */
  7. /*                                                                        */
  8. /*------------------------------------------------------------------------*/
  9.  
  10. #if !defined( __OBJECT_H )
  11. #define __OBJECT_H
  12.  
  13. #if !defined( __CLSTYPES_H )
  14. #include <ClsTypes.h>
  15. #endif  // __CLSTYPES_H
  16.  
  17. #if !defined( __CLSDEFS_H )
  18. #include <ClsDefs.h>
  19. #endif  // __CLSDEFS_H
  20.  
  21. #if !defined( __STDDEF_H )
  22. #include <StdDef.h>
  23. #endif  // __STDDEF_H
  24.  
  25. #if !defined( __IOSTREAM_H )
  26. #include <iostream.h>
  27. #endif  // __IOSTREAM_H
  28.  
  29. _CLASSDEF(Object)
  30. _CLASSDEF(Error)
  31.  
  32. class _CLASSTYPE Object
  33. {
  34.  
  35. public:
  36.  
  37.     virtual ~Object()
  38.         {
  39.         }
  40.  
  41.     virtual classType isA() const = 0;
  42.     virtual char _FAR *nameOf() const = 0;
  43.     virtual hashValueType hashValue() const = 0;
  44.     virtual int isEqual( const Object _FAR & ) const = 0;
  45.  
  46.     virtual int isSortable() const
  47.         {
  48.         return 0;
  49.         }
  50.  
  51.     virtual int isAssociation() const
  52.         {
  53.         return 0;
  54.         }
  55.  
  56.     void _FAR *operator new( size_t s );
  57.     virtual void forEach( iterFuncType, void _FAR * );
  58.     virtual Object _FAR & firstThat( condFuncType, void _FAR * ) const;
  59.     virtual Object _FAR & lastThat( condFuncType, void _FAR * ) const;
  60.     virtual void printOn( ostream _FAR & ) const = 0;
  61.  
  62.     static Object _FAR *ZERO;
  63.  
  64.     static Object _FAR & ptrToRef( Object _FAR *p )
  65.         { return p == 0 ? *ZERO : *p; }
  66.  
  67.     friend ostream _FAR& operator << ( ostream _FAR&, const Object _FAR& );
  68.  
  69. };
  70.  
  71. #define NOOBJECT  (*(Object::ZERO))
  72.  
  73. inline void Object::forEach( iterFuncType func, void _FAR *args )
  74. {
  75.     ( *func )( *this, args );
  76. }
  77.  
  78. inline Object _FAR & Object::firstThat( condFuncType func,
  79.                                         void _FAR *args
  80.                                       ) const
  81. {
  82.    return (*func)( *this, args ) == 0 ? NOOBJECT : *this;
  83. }
  84.  
  85. inline Object _FAR & Object::lastThat( condFuncType func,
  86.                                        void _FAR *args
  87.                                      ) const
  88. {
  89.     return Object::firstThat( func, args );
  90. }
  91.  
  92. inline ostream _FAR& operator << ( ostream _FAR& out, const Object _FAR& obj )
  93. {
  94.     obj.printOn( out );
  95.     return out;
  96. }
  97.  
  98. inline int operator == ( const Object _FAR& test1, const Object _FAR& test2 )
  99. {
  100.     return (test1.isA() == test2.isA()) && test1.isEqual( test2 );
  101. }
  102.  
  103. inline int operator !=( const Object _FAR& test1, const Object _FAR& test2 )
  104. {
  105.     return !( test1 == test2 );
  106. }
  107.  
  108.  
  109. class _CLASSTYPE Error : public Object
  110. {
  111.  
  112. public:
  113.  
  114.     virtual classType isA() const
  115.         {
  116.         return errorClass;
  117.         }
  118.  
  119.     virtual char _FAR *nameOf() const
  120.         {
  121.         return "Error";
  122.         }
  123.  
  124.     virtual hashValueType hashValue() const
  125.         {
  126.         return ERROR_CLASS_HASH_VALUE;
  127.         }
  128.  
  129.     virtual int isEqual( const Object _FAR & ) const
  130.         {
  131.         return 1;
  132.         }
  133.  
  134.     virtual void printOn( ostream _FAR & ) const;
  135.  
  136.     void operator delete( void _FAR * );
  137.  
  138. };
  139.  
  140.  
  141. inline void Error::printOn( ostream _FAR & out ) const
  142. {
  143.     out << nameOf() << '\n';
  144. }
  145.  
  146. inline void Error::operator delete( void _FAR * )
  147. {
  148.     ClassLib_error( __EDELERROR );
  149. }
  150.  
  151. #endif
  152.  
  153.