home *** CD-ROM | disk | FTP | other *** search
/ Chip 1997 October / Chip_1997-10_cd.bin / tema / sybase / powerj / h.z / WCEXCEPT.H < prev    next >
C/C++ Source or Header  |  1996-11-06  |  7KB  |  196 lines

  1. //
  2. //  wcexcept.h    Definitions for exception base classes.  These classes are
  3. //          Inherited by each of the WATCOM Container Classes
  4. //
  5. //  Copyright by WATCOM International Corp. 1988-1996.  All rights reserved.
  6. //
  7. #ifndef _WCEXCEPT_H_INCLUDED
  8. #define _WCEXCEPT_H_INCLUDED
  9. #if !defined(_ENABLE_AUTODEPEND)
  10.   #pragma read_only_file;
  11. #endif
  12.  
  13. #ifndef __cplusplus
  14. #error wcexcept.h is for use with C++
  15. #endif
  16.  
  17. #ifndef _WCDEFS_H_INCLUDED
  18.  #include <wcdefs.h>
  19. #endif
  20.  
  21. #if defined(_M_IX86)
  22.   #pragma pack(__push,1);
  23. #else
  24.   #pragma pack(__push,8);
  25. #endif
  26.  
  27. //
  28. //  The WCExcept class defines the exception handling for the WATCOM
  29. //  Container non-iterative classes.  The current errors supported are:
  30. //
  31. //    empty_container - if an invalid operation on an empty container object
  32. //            is attempted, this error can be thrown
  33. //    index_range    -- if an index value is not valid, this error can
  34. //                         be thrown.
  35. //    not_empty      -- if a container object which should be empty is being
  36. //            destroyed by the class destructor, this error can be
  37. //            thrown.
  38. //    not_unique     -- if an attempt to insert a value into a set which
  39. //            previously contained an equivalent value is made, this
  40. //            error can be thrown.
  41. //    out_of_memory  -- if an attempt to allocate memory fails, this error
  42. //                   can be thrown.
  43. //    resize_required - if an attempt was made to insert into a full vector,
  44. //            or index a position with index length or greater in
  45. //            WCValVector or WCPtrVector, this exception can be
  46. //            thrown. If this exception is disabled, the necessary
  47. //            resize will be performed.
  48. //    zero_buckets   -- if an attempt to resize a hash table, hash set, or
  49. //            hash dictionary to zero buckets, this error can be
  50. //            thrown
  51. //
  52.  
  53. class WCExcept {
  54. private:
  55.     int             exception_flags;
  56.  
  57. protected:
  58.     inline void base_construct( const WCExcept * orig ) {
  59.     exception_flags = orig->exception_flags;
  60.     }
  61.     _WPRTLINK void base_throw_empty_container() const;
  62.     _WPRTLINK void base_throw_index_range() const;
  63.     //
  64.     // non-const since it disables the object's exceptions to try and prevent
  65.     // more than one exception being thrown
  66.     //
  67.     _WPRTLINK void base_throw_not_empty();
  68.     _WPRTLINK void base_throw_not_unique() const;
  69.     _WPRTLINK void base_throw_out_of_memory() const;
  70.     _WPRTLINK void base_throw_resize_required() const;
  71.     _WPRTLINK void base_throw_zero_buckets() const;
  72.  
  73. public:
  74.     inline WCExcept() : exception_flags(0) {};
  75.     inline virtual ~WCExcept() {};
  76.  
  77.     enum wcstate {                // Error state
  78.         all_fine          = 0x0000,    // - no errors
  79.         check_none         = all_fine,    // - don't throw any exceptions
  80.         not_empty         = 0x0001,    // - container not empty on destruction
  81.         index_range       = 0x0002,    // - index is out of range
  82.         empty_container    = 0x0004,    // - invalid request on empty container
  83.     out_of_memory     = 0x0008,    // - allocation failed
  84.     resize_required    = 0x0010,    // - resize required for request
  85.     not_unique    = 0x0020,    // - adding duplicate value to set
  86.     zero_buckets    = 0x0040,    // - resizing hash to zero buckets
  87.  
  88.         // value to use to check for all errors (all exceptions enabled)
  89.         check_all   = (not_empty|index_range|empty_container|out_of_memory
  90.               |resize_required|not_unique|zero_buckets)
  91.     };
  92.  
  93.     typedef int wc_state;
  94.  
  95.     // For back compatiblity
  96.     typedef wc_state wclist_state;
  97.  
  98.     // this object is thrown on an exception
  99.     class failure : public __WATCOM_exception {
  100.     private:
  101.         wc_state    _cause;
  102.     public:
  103.         failure( wc_state state ) : _cause( state ) {};
  104.         wc_state cause() const {
  105.             return( _cause );
  106.         };
  107.     };
  108.  
  109.     inline wc_state exceptions() const {
  110.         return( exception_flags );
  111.     }
  112.  
  113.     inline wc_state exceptions( wc_state const flag_set ) {
  114.         wc_state old_flags = exception_flags;
  115.         exception_flags = flag_set;
  116.         return( old_flags );
  117.     }
  118. };
  119.  
  120.  
  121. // For back compatiblity
  122. typedef WCExcept WCListExcept;
  123.  
  124.  
  125.  
  126.  
  127. //
  128. //  The WCIterExcept class defines the exception handling for WATCOM Container
  129. //  iterator classes.  The current errors supported are:
  130. //
  131. //      iter_range  -- the iterator advance value for the += or -= operators
  132. //               cannot be non-positive
  133. //      undef_item  -- if an iterator is outside the bounds of the object,
  134. //               or the iterator was never initialized with an object,
  135. //               this error can be thrown on call to the current member
  136. //               function (or the key and value member functions on
  137. //               an iterator for a dictionary).
  138. //      undef_iter  -- if an iterator is outside the bounds of the object, or
  139. //               if the iterator was never initialized with a object,
  140. //                     this error can be thrown on an invalid operation
  141. //               other than a call to the member function current (or
  142. //               the key and value member functions on an iterator for
  143. //               a dictionary).
  144. //
  145.  
  146. class WCIterExcept {
  147. private:
  148.     int exception_flags;
  149.  
  150. protected:
  151.     _WPRTLINK void base_throw_iter_range() const;
  152.     _WPRTLINK void base_throw_undef_item() const;
  153.     _WPRTLINK void base_throw_undef_iter() const;
  154.  
  155. public:
  156.     inline WCIterExcept() : exception_flags(0) {};
  157.     inline virtual ~WCIterExcept() {};
  158.  
  159.     enum wciterstate {                  // Error state
  160.         all_fine    = 0x0000,           // - no errors
  161.         check_none  = all_fine,        // - don't throw any exceptions
  162.         undef_iter  = 0x0001,           // - iterator position is undefined
  163.         undef_item  = 0x0002,           // - current iterator item is undefined
  164.         iter_range  = 0x0004,           // - iterator advance value is bad
  165.  
  166.         // value to use to check for all errors
  167.         check_all   = (undef_iter|undef_item|iter_range)
  168.     };
  169.     typedef int wciter_state;
  170.  
  171.     // this object is thrown on an exception
  172.     class failure : public __WATCOM_exception {
  173.     private:
  174.         wciter_state    _cause;
  175.     public:
  176.         failure( wciter_state state ) : _cause( state ) {};
  177.         wciter_state cause() const {
  178.             return( _cause );
  179.         };
  180.     };
  181.  
  182.     inline wciter_state exceptions() const {
  183.         return( exception_flags );
  184.     }
  185.  
  186.     inline wciter_state exceptions( wciter_state flag_set ) {
  187.         wciter_state old_flags = exception_flags;
  188.         exception_flags = flag_set;
  189.         return( old_flags );
  190.     }
  191. };
  192.  
  193. #pragma pack(__pop);
  194.  
  195. #endif
  196.