home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c082_144 / 2.ddi / CLASSINC.ZIP / OBJECT.H < prev    next >
Encoding:
C/C++ Source or Header  |  1992-06-10  |  3.9 KB  |  165 lines

  1. /*------------------------------------------------------------------------*/
  2. /*                                                                        */
  3. /*  OBJECT.H                                                              */
  4. /*                                                                        */
  5. /*  Copyright Borland International 1991, 1992                            */
  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. #pragma option -Vo-
  30. #if defined( __BCOPT__ ) && !defined( _ALLOW_po )
  31. #pragma option -po-
  32. #endif
  33.  
  34. _CLASSDEF(Object)
  35. _CLASSDEF(Error)
  36.  
  37. class _CLASSTYPE Object
  38. {
  39.  
  40. public:
  41.  
  42.     virtual ~Object()
  43.         {
  44.         }
  45.  
  46.     virtual classType isA() const = 0;
  47.     virtual char _FAR *nameOf() const = 0;
  48.     virtual hashValueType hashValue() const = 0;
  49.     virtual int isEqual( const Object _FAR & ) const = 0;
  50.  
  51.     virtual int isSortable() const
  52.         {
  53.         return 0;
  54.         }
  55.  
  56.     virtual int isAssociation() const
  57.         {
  58.         return 0;
  59.         }
  60.  
  61.     virtual void forEach( iterFuncType, void _FAR * );
  62.     virtual Object _FAR & firstThat( condFuncType, void _FAR * ) const;
  63.     virtual Object _FAR & lastThat( condFuncType, void _FAR * ) const;
  64.     virtual void printOn( ostream _FAR & ) const = 0;
  65.  
  66.     static Object _FAR *ZERO;
  67.  
  68.     static Object _FAR & ptrToRef( Object _FAR *p )
  69.         { return p == 0 ? *ZERO : *p; }
  70.  
  71.     static const Object _FAR & ptrToRef( const Object _FAR *p )
  72.         { return p == 0 ? *ZERO : *p; }
  73.  
  74.     friend ostream _FAR& operator << ( ostream _FAR&, const Object _FAR& );
  75.  
  76. };
  77.  
  78. #define NOOBJECT  (*(Object::ZERO))
  79.  
  80. inline void Object::forEach( iterFuncType func, void _FAR *args )
  81. {
  82.     ( *func )( *this, args );
  83. }
  84.  
  85. inline Object _FAR & Object::firstThat( condFuncType func,
  86.                                         void _FAR *args
  87.                                       ) const
  88. {
  89.    return (*func)( *this, args ) == 0 ? NOOBJECT : (Object&)*this;
  90. }
  91.  
  92. inline Object _FAR & Object::lastThat( condFuncType func,
  93.                                        void _FAR *args
  94.                                      ) const
  95. {
  96.     return Object::firstThat( func, args );
  97. }
  98.  
  99. inline ostream _FAR& operator << ( ostream _FAR& out, const Object _FAR& obj )
  100. {
  101.     obj.printOn( out );
  102.     return out;
  103. }
  104.  
  105. inline int operator == ( const Object _FAR& test1, const Object _FAR& test2 )
  106. {
  107.     return (test1.isA() == test2.isA()) && test1.isEqual( test2 );
  108. }
  109.  
  110. inline int operator !=( const Object _FAR& test1, const Object _FAR& test2 )
  111. {
  112.     return !( test1 == test2 );
  113. }
  114.  
  115.  
  116. class _CLASSTYPE Error : public Object
  117. {
  118.  
  119. public:
  120.  
  121.     virtual classType isA() const
  122.         {
  123.         return errorClass;
  124.         }
  125.  
  126.     virtual char _FAR *nameOf() const
  127.         {
  128.         return "Error";
  129.         }
  130.  
  131.     virtual hashValueType hashValue() const
  132.         {
  133.         return ERROR_CLASS_HASH_VALUE;
  134.         }
  135.  
  136.     virtual int isEqual( const Object _FAR & ) const
  137.         {
  138.         return 1;
  139.         }
  140.  
  141.     virtual void printOn( ostream _FAR & ) const;
  142.  
  143.     void operator delete( void _FAR * );
  144.  
  145. };
  146.  
  147.  
  148. inline void Error::printOn( ostream _FAR & out ) const
  149. {
  150.     out << nameOf() << '\n';
  151. }
  152.  
  153. inline void Error::operator delete( void _FAR * )
  154. {
  155.     ClassLib_error( __EDELERROR );
  156. }
  157.  
  158. #if defined( __BCOPT__ ) && !defined( _ALLOW_po )
  159. #pragma option -po.
  160. #endif
  161. #pragma option -Vo.
  162.  
  163. #endif
  164.  
  165.