This repository has been archived on 2024-12-16. You can view files and clone it, but cannot push or open issues or pull requests.
CodeBlocksPortable/WATCOM/h/wcsibase.h

133 lines
3 KiB
C++

//
// wcsibase.h Base Class Definitions for the WATCOM Container Skip List
// Iterator 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 _WCSIBASE_H_INCLUDED
#define _WCSIBASE_H_INCLUDED
#ifndef _ENABLE_AUTODEPEND
#pragma read_only_file;
#endif
#ifndef __cplusplus
#error This header file requires C++
#endif
#ifndef _WCEXCEPT_H_INCLUDED
#include <wcexcept.h>
#endif
//
// The WCSkipListIterBase is the base iterator class for all skip list
// iterators.
//
// Objects of this type should never be instantiated: use the appropriate
// skip list iterator defined in wcskipit.h instead.
//
// WCIterExcept is used as a base class to provide exception handling
//
template<class Type>
class WCSkipListIterBase : public WCIterExcept {
private:
typedef WCSkipListPtrs * node_ptr;
const WCSkipListBase<Type> *curr_skip_list;
protected:
node_ptr curr;
private:
int at_end;
WCbool base_advance();
protected:
inline WCSkipListNode<Type> *base_curr_node() const {
if( curr != 0 ) {
return( WCSkipListBase<Type>::base_whole_node( curr ) );
} else {
return( 0 );
}
};
public:
inline WCSkipListIterBase() : curr_skip_list( 0 )
, curr( 0 ), at_end( 0 ) {};
inline WCSkipListIterBase( const WCSkipListBase<Type>& skip_list )
: curr_skip_list( &skip_list ), curr( 0 ), at_end( 0 ) {};
inline ~WCSkipListIterBase() {};
inline const WCSkipListBase<Type> *container() const {
if( curr_skip_list == 0 ) {
base_throw_undef_iter();
}
return( curr_skip_list );
};
Type current() const;
inline void reset() {
curr = 0;
at_end = 0;
};
inline void reset( const WCSkipListBase<Type> &skip_list ) {
curr_skip_list = &skip_list;
reset();
};
inline WCbool operator++() {
return( base_advance() );
}
inline WCbool operator()() {
return( base_advance() );
}
};
template <class Type>
WCbool WCSkipListIterBase<Type>::base_advance() {
if( ( curr_skip_list == 0 )||( at_end ) ) {
at_end = 1;
base_throw_undef_iter();
return( FALSE );
}
if( curr == 0 ) {
curr = curr_skip_list->header;
}
curr = curr->forward[ 0 ];
if( curr == 0 ) {
at_end = 1;
return( FALSE );
} else {
return( TRUE );
}
};
template <class Type>
Type WCSkipListIterBase<Type>::current() const {
if( curr == 0 ) {
base_throw_undef_item();
Type temp;
return( temp );
}
return( base_curr_node()->data );
};
#endif