home *** CD-ROM | disk | FTP | other *** search
- /* Copyright (c) IBM Corp. 1992 */
- #include <ibexcept.h>
-
- template < class Element, class Key, class ElementOps >
- Boolean IGHashKeyBag < Element, Key, ElementOps >::Cursor::setToFirst () {
- return ivCollection->setToFirst (*this);
- }
-
- template < class Element, class Key, class ElementOps >
- Boolean IGHashKeyBag < Element, Key, ElementOps >::Cursor::setToNext () {
- return ivCollection->setToNext (*this);
- }
-
- template < class Element, class Key, class ElementOps >
- Boolean IGHashKeyBag < Element, Key, ElementOps >::Cursor::isValid () const {
- return ivImpl.ivNode != 0;
- }
-
- template < class Element, class Key, class ElementOps >
- void IGHashKeyBag < Element, Key, ElementOps >::Cursor::invalidate () {
- ivImpl.ivNode = 0;
- }
-
- template < class Element, class Key, class ElementOps >
- IHashKeyBagImpl::Node* IGHashKeyBag < Element, Key, ElementOps >::Operations::
- newNode (void const* element) const {
- Node *result = new Node (*(Element const*) element);
- ICHECK (result != 0, IOutOfMemory, "out of memory");
- return result;
- }
-
- template < class Element, class Key, class ElementOps >
- IHashKeyBagImpl::Node* IGHashKeyBag < Element, Key, ElementOps >::Operations::
- copyNode (void const* node) const {
- Node *result = new Node (((Node const*) node)->ivElement);
- ICHECK (result != 0, IOutOfMemory, "out of memory");
- return result;
- }
-
- template < class Element, class Key, class ElementOps >
- void IGHashKeyBag < Element, Key, ElementOps >::Operations::
- deleteNode (void* node) const {
- delete (Node*) node;
- }
-
- template < class Element, class Key, class ElementOps >
- void* IGHashKeyBag < Element, Key, ElementOps >::Operations::
- newBlock (size_t size) const {
- return cvElementOps.allocate (size);
- }
-
- template < class Element, class Key, class ElementOps >
- void IGHashKeyBag < Element, Key, ElementOps >::Operations::
- removeBlock (void* p, size_t size) const {
- cvElementOps.deallocate (p);
- }
-
- template < class Element, class Key, class ElementOps >
- INumber IGHashKeyBag < Element, Key, ElementOps >::Operations::
- getHashvalue (void const* key, INumber noEntries) const {
- return cvElementOps.keyOps.hash (*(Key const*) key, noEntries);
- }
-
- template < class Element, class Key, class ElementOps >
- void* IGHashKeyBag < Element, Key, ElementOps >::Operations::
- elementAt (void* node) const
- { return &((Node*) node)->ivElement;
- }
-
- template < class Element, class Key, class ElementOps >
- void const* IGHashKeyBag < Element, Key, ElementOps >::Operations::
- constElementAt (void const* node) const
- { return &((Node*) node)->ivElement;
- }
-
- template < class Element, class Key, class ElementOps >
- void const* IGHashKeyBag < Element, Key, ElementOps >::Operations::
- keyAt (void const* node) const
- { return &cvElementOps.key (((Node*) node)->ivElement);
- }
-
- template < class Element, class Key, class ElementOps >
- Boolean IGHashKeyBag < Element, Key, ElementOps >::Operations::
- isKeyEqualTo (void const* node1, void const* node2) const
- { return cvElementOps.keyOps.equal
- (cvElementOps.key (((Node const*)node1)->ivElement),
- cvElementOps.key (((Node const*)node2)->ivElement));
- }
-
- template < class Element, class Key, class ElementOps >
- Boolean IGHashKeyBag < Element, Key, ElementOps >::Operations::
- isKeyEqualToElement (void const* node, void const* element) const
- { return cvElementOps.keyOps.equal
- (cvElementOps.key (((Node const*)node)->ivElement),
- cvElementOps.key (*(Element const*)element));
- }
-
- template < class Element, class Key, class ElementOps >
- Boolean IGHashKeyBag < Element, Key, ElementOps >::Operations::
- isKeyEqualToKey (void const* node, void const* key) const
- { return cvElementOps.keyOps.equal
- (cvElementOps.key (((Node const*)node)->ivElement),
- (*(Key const*)key));
- }
-
- template < class Element, class Key, class ElementOps >
- void IGHashKeyBag < Element, Key, ElementOps >::Operations::
- copyFrom (void* node, void const* element) const
- { cvElementOps.assign
- (((Node*)node)->ivElement, *(Element const*)element);
- }
-
- template < class Element, class Key, class ElementOps >
- Boolean IGHashKeyBag < Element, Key, ElementOps >::Operations::
- constantFunctionIteration (void *iterationFunction,
- void* env,
- void const* node) {
- return (*(Boolean (*) (Element const&, void*)) iterationFunction)
- (((Node const*)node)->ivElement, env);
- }
-
- template < class Element, class Key, class ElementOps >
- Boolean IGHashKeyBag < Element, Key, ElementOps >::Operations::
- functionIteration (void *iterationFunction, void* env, void* node) {
- return (*(Boolean (*) (Element&, void*)) iterationFunction)
- (((Node*)node)->ivElement, env);
- }
-
- template < class Element, class Key, class ElementOps >
- Boolean IGHashKeyBag < 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 >
- Boolean IGHashKeyBag < Element, Key, ElementOps >::Operations::
- iteratorIteration (void* iterator, void* node) {
- return ((IIterator < Element >*)iterator)->
- applyTo (((Node*)node)->ivElement);
- }
-
- template < class Element, class Key, class ElementOps >
- long IGHashKeyBag < Element, Key, ElementOps >::Operations::
- functionComparison (void *comparisonFunction,
- void const* node1,
- void const* node2) {
- return (*(long (*) (Element const&, Element const&) const)
- comparisonFunction)
- ( ((Node const*)node1)->ivElement,
- ((Node const*)node2)->ivElement );
- }
-
- template < class Element, class Key, class ElementOps >
- ElementOps IGHashKeyBag < Element, Key, ElementOps >::cvElementOps;