home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
cset21v1.zip
/
IBMCPP
/
IBMCLASS
/
IHSHKS.C
< prev
next >
Wrap
Text File
|
1993-09-22
|
6KB
|
146 lines
/*******************************************************************************
* *
* COPYRIGHT: *
* IBM C/C++ Tools Version 2.01 - Collection Class Library *
* Licensed Materials - Property of IBM *
* (C) Copyright IBM Corporation 1992, 1993 *
* All Rights Reserved *
* US Government Users Restricted Rights - Use, duplication, or disclosure *
* restricted by GSA ADP Schedule Contract with IBM Corp. *
* *
*******************************************************************************/
#include <ibexcept.h>
template < class Element, class Key, class ElementOps >
IBoolean IGHashKeySet < Element, Key, ElementOps >::Cursor::setToFirst () {
return ivCollection->setToFirst (*this);
}
template < class Element, class Key, class ElementOps >
IBoolean IGHashKeySet < Element, Key, ElementOps >::Cursor::setToNext () {
return ivCollection->setToNext (*this);
}
template < class Element, class Key, class ElementOps >
IBoolean IGHashKeySet < Element, Key, ElementOps >::Cursor::isValid () const {
return ivImpl.ivNode != 0;
}
template < class Element, class Key, class ElementOps >
void IGHashKeySet < Element, Key, ElementOps >::Cursor::invalidate () {
ivImpl.ivNode = 0;
}
template < class Element, class Key, class ElementOps >
IHashKeyBagImpl::Node* IGHashKeySet < Element, Key, ElementOps >::Operations::
newNode (void const* element) const {
Node *result = new Node (*(Element const*) element);
ICHECK (result != 0, IOutOfMemory, IOutOfMemoryText)
return result;
}
template < class Element, class Key, class ElementOps >
IHashKeyBagImpl::Node* IGHashKeySet < Element, Key, ElementOps >::Operations::
copyNode (void const* node) const {
Node *result = new Node (((Node const*) node)->ivElement);
ICHECK (result != 0, IOutOfMemory, IOutOfMemoryText)
return result;
}
template < class Element, class Key, class ElementOps >
void IGHashKeySet < Element, Key, ElementOps >::Operations::
deleteNode (void* node) const {
delete (Node*) node;
}
template < class Element, class Key, class ElementOps >
void* IGHashKeySet < Element, Key, ElementOps >::Operations::
newBlock (size_t size) const {
#if defined (__IBMCPP__) && defined (__DEBUG_ALLOC__)
return elementOps().allocate (size, __FILE__, __LINE__);
#else
return elementOps().allocate (size);
#endif
}
template < class Element, class Key, class ElementOps >
void IGHashKeySet < Element, Key, ElementOps >::Operations::
removeBlock (void* p, size_t size) const {
#if defined (__IBMCPP__) && defined (__DEBUG_ALLOC__)
elementOps().deallocate (p, __FILE__, __LINE__);
#else
elementOps().deallocate (p);
#endif
}
template < class Element, class Key, class ElementOps >
INumber IGHashKeySet < Element, Key, ElementOps >::Operations::
getHashvalue (void const* key, INumber noEntries) const {
return elementOps().keyOps.hash (*(Key const*) key, noEntries);
}
template < class Element, class Key, class ElementOps >
void* IGHashKeySet < Element, Key, ElementOps >::Operations::
elementAt (void* node) const
{ return &((Node*) node)->ivElement;
}
template < class Element, class Key, class ElementOps >
void const* IGHashKeySet < Element, Key, ElementOps >::Operations::
keyAt (void const* node) const
{ return &elementOps().key (((Node*) node)->ivElement);
}
template < class Element, class Key, class ElementOps >
IBoolean IGHashKeySet < Element, Key, ElementOps >::Operations::
isKeyEqualToElement (void const* node, void const* element) const
{ return elementOps().keyOps.equal
(elementOps().key (((Node const*)node)->ivElement),
elementOps().key (*(Element const*)element));
}
template < class Element, class Key, class ElementOps >
IBoolean IGHashKeySet < Element, Key, ElementOps >::Operations::
isKeyEqualToKey (void const* node, void const* key) const
{ return elementOps().keyOps.equal
(elementOps().key (((Node const*)node)->ivElement),
(*(Key const*)key));
}
template < class Element, class Key, class ElementOps >
void IGHashKeySet < Element, Key, ElementOps >::Operations::
copyFrom (void* node, void const* element) const
{ elementOps().assign
(((Node*)node)->ivElement, *(Element const*)element);
}
template < class Element, class Key, class ElementOps >
IBoolean IGHashKeySet < Element, Key, ElementOps >::Operations::
constantFunctionIteration (void *iterationFunction,
void* env,
void const* node) {
return (*(IBoolean (*) (Element const&, void*)) iterationFunction)
(((Node const*)node)->ivElement, env);
}
template < class Element, class Key, class ElementOps >
IBoolean IGHashKeySet < Element, Key, ElementOps >::Operations::
functionIteration (void *iterationFunction, void* env, void* node) {
return (*(IBoolean (*) (Element&, void*)) iterationFunction)
(((Node*)node)->ivElement, env);
}
template < class Element, class Key, class ElementOps >
IBoolean IGHashKeySet < Element, Key, ElementOps >::Operations::
constantIteratorIteration (void* iterator, void const* node) {
return ((IConstantIterator < Element >*)iterator)->
applyTo (((Node const*)node)->ivElement);
}
template < class Element, class Key, class ElementOps >
IBoolean IGHashKeySet < Element, Key, ElementOps >::Operations::
iteratorIteration (void* iterator, void* node) {
return ((IIterator < Element >*)iterator)->
applyTo (((Node*)node)->ivElement);
}