210 lines
7.1 KiB
C
210 lines
7.1 KiB
C
|
//
|
||
|
// wcexcept.h Definitions for exception base classes. These classes are
|
||
|
// Inherited by each of the WATCOM Container Classes
|
||
|
//
|
||
|
// =========================================================================
|
||
|
//
|
||
|
// Open Watcom Project
|
||
|
//
|
||
|
// Copyright (c) 2002-2010 Open Watcom Contributors. All Rights Reserved.
|
||
|
// Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved.
|
||
|
//
|
||
|
// This file is automatically generated. Do not edit directly.
|
||
|
//
|
||
|
// =========================================================================
|
||
|
//
|
||
|
#ifndef _WCEXCEPT_H_INCLUDED
|
||
|
#define _WCEXCEPT_H_INCLUDED
|
||
|
|
||
|
#ifndef _ENABLE_AUTODEPEND
|
||
|
#pragma read_only_file;
|
||
|
#endif
|
||
|
|
||
|
#ifndef __cplusplus
|
||
|
#error This header file requires C++
|
||
|
#endif
|
||
|
|
||
|
#ifndef _COMDEF_H_INCLUDED
|
||
|
#include <_comdef.h>
|
||
|
#endif
|
||
|
|
||
|
#ifndef _WCDEFS_H_INCLUDED
|
||
|
#include <wcdefs.h>
|
||
|
#endif
|
||
|
|
||
|
#ifdef _M_IX86
|
||
|
#pragma pack( __push, 1 )
|
||
|
#else
|
||
|
#pragma pack( __push, 8 )
|
||
|
#endif
|
||
|
|
||
|
//
|
||
|
// The WCExcept class defines the exception handling for the WATCOM
|
||
|
// Container non-iterative classes. The current errors supported are:
|
||
|
//
|
||
|
// empty_container - if an invalid operation on an empty container object
|
||
|
// is attempted, this error can be thrown
|
||
|
// index_range -- if an index value is not valid, this error can
|
||
|
// be thrown.
|
||
|
// not_empty -- if a container object which should be empty is being
|
||
|
// destroyed by the class destructor, this error can be
|
||
|
// thrown.
|
||
|
// not_unique -- if an attempt to insert a value into a set which
|
||
|
// previously contained an equivalent value is made, this
|
||
|
// error can be thrown.
|
||
|
// out_of_memory -- if an attempt to allocate memory fails, this error
|
||
|
// can be thrown.
|
||
|
// resize_required - if an attempt was made to insert into a full vector,
|
||
|
// or index a position with index length or greater in
|
||
|
// WCValVector or WCPtrVector, this exception can be
|
||
|
// thrown. If this exception is disabled, the necessary
|
||
|
// resize will be performed.
|
||
|
// zero_buckets -- if an attempt to resize a hash table, hash set, or
|
||
|
// hash dictionary to zero buckets, this error can be
|
||
|
// thrown
|
||
|
//
|
||
|
|
||
|
class WCExcept {
|
||
|
private:
|
||
|
int exception_flags;
|
||
|
|
||
|
protected:
|
||
|
inline void base_construct( const WCExcept * orig ) {
|
||
|
exception_flags = orig->exception_flags;
|
||
|
}
|
||
|
_WPRTLINK void base_throw_empty_container() const;
|
||
|
_WPRTLINK void base_throw_index_range() const;
|
||
|
//
|
||
|
// non-const since it disables the object's exceptions to try and prevent
|
||
|
// more than one exception being thrown
|
||
|
//
|
||
|
_WPRTLINK void base_throw_not_empty();
|
||
|
_WPRTLINK void base_throw_not_unique() const;
|
||
|
_WPRTLINK void base_throw_out_of_memory() const;
|
||
|
_WPRTLINK void base_throw_resize_required() const;
|
||
|
_WPRTLINK void base_throw_zero_buckets() const;
|
||
|
|
||
|
public:
|
||
|
inline WCExcept() : exception_flags(0) {};
|
||
|
inline virtual ~WCExcept() {};
|
||
|
|
||
|
enum wcstate { // Error state
|
||
|
all_fine = 0x0000, // - no errors
|
||
|
check_none = all_fine, // - don't throw any exceptions
|
||
|
not_empty = 0x0001, // - container not empty on destruction
|
||
|
index_range = 0x0002, // - index is out of range
|
||
|
empty_container = 0x0004, // - invalid request on empty container
|
||
|
out_of_memory = 0x0008, // - allocation failed
|
||
|
resize_required = 0x0010, // - resize required for request
|
||
|
not_unique = 0x0020, // - adding duplicate value to set
|
||
|
zero_buckets = 0x0040, // - resizing hash to zero buckets
|
||
|
|
||
|
// value to use to check for all errors (all exceptions enabled)
|
||
|
check_all = (not_empty|index_range|empty_container|out_of_memory
|
||
|
|resize_required|not_unique|zero_buckets)
|
||
|
};
|
||
|
|
||
|
typedef int wc_state;
|
||
|
|
||
|
// For back compatiblity
|
||
|
typedef wc_state wclist_state;
|
||
|
|
||
|
// this object is thrown on an exception
|
||
|
class failure : public __WATCOM_exception {
|
||
|
private:
|
||
|
wc_state _cause;
|
||
|
public:
|
||
|
failure( wc_state state ) : _cause( state ) {};
|
||
|
wc_state cause() const {
|
||
|
return( _cause );
|
||
|
};
|
||
|
};
|
||
|
|
||
|
inline wc_state exceptions() const {
|
||
|
return( exception_flags );
|
||
|
}
|
||
|
|
||
|
inline wc_state exceptions( wc_state const flag_set ) {
|
||
|
wc_state old_flags = exception_flags;
|
||
|
exception_flags = flag_set;
|
||
|
return( old_flags );
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
// For back compatiblity
|
||
|
typedef WCExcept WCListExcept;
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// The WCIterExcept class defines the exception handling for WATCOM Container
|
||
|
// iterator classes. The current errors supported are:
|
||
|
//
|
||
|
// iter_range -- the iterator advance value for the += or -= operators
|
||
|
// cannot be non-positive
|
||
|
// undef_item -- if an iterator is outside the bounds of the object,
|
||
|
// or the iterator was never initialized with an object,
|
||
|
// this error can be thrown on call to the current member
|
||
|
// function (or the key and value member functions on
|
||
|
// an iterator for a dictionary).
|
||
|
// undef_iter -- if an iterator is outside the bounds of the object, or
|
||
|
// if the iterator was never initialized with a object,
|
||
|
// this error can be thrown on an invalid operation
|
||
|
// other than a call to the member function current (or
|
||
|
// the key and value member functions on an iterator for
|
||
|
// a dictionary).
|
||
|
//
|
||
|
|
||
|
class WCIterExcept {
|
||
|
private:
|
||
|
int exception_flags;
|
||
|
|
||
|
protected:
|
||
|
_WPRTLINK void base_throw_iter_range() const;
|
||
|
_WPRTLINK void base_throw_undef_item() const;
|
||
|
_WPRTLINK void base_throw_undef_iter() const;
|
||
|
|
||
|
public:
|
||
|
inline WCIterExcept() : exception_flags(0) {};
|
||
|
inline virtual ~WCIterExcept() {};
|
||
|
|
||
|
enum wciterstate { // Error state
|
||
|
all_fine = 0x0000, // - no errors
|
||
|
check_none = all_fine, // - don't throw any exceptions
|
||
|
undef_iter = 0x0001, // - iterator position is undefined
|
||
|
undef_item = 0x0002, // - current iterator item is undefined
|
||
|
iter_range = 0x0004, // - iterator advance value is bad
|
||
|
|
||
|
// value to use to check for all errors
|
||
|
check_all = (undef_iter|undef_item|iter_range)
|
||
|
};
|
||
|
typedef int wciter_state;
|
||
|
|
||
|
// this object is thrown on an exception
|
||
|
class failure : public __WATCOM_exception {
|
||
|
private:
|
||
|
wciter_state _cause;
|
||
|
public:
|
||
|
failure( wciter_state state ) : _cause( state ) {};
|
||
|
wciter_state cause() const {
|
||
|
return( _cause );
|
||
|
};
|
||
|
};
|
||
|
|
||
|
inline wciter_state exceptions() const {
|
||
|
return( exception_flags );
|
||
|
}
|
||
|
|
||
|
inline wciter_state exceptions( wciter_state flag_set ) {
|
||
|
wciter_state old_flags = exception_flags;
|
||
|
exception_flags = flag_set;
|
||
|
return( old_flags );
|
||
|
}
|
||
|
};
|
||
|
|
||
|
#pragma pack( __pop )
|
||
|
|
||
|
#endif
|