home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-04-21 | 2.8 KB | 115 lines | [TEXT/MPS ] |
- // The C++ Booch Components (Version 2.1)
- // (C) Copyright 1990-1993 Grady Booch. All Rights Reserved.
- //
- // BCMap.h
- //
- // This file contains the declaration of the map abstract base class
- // and its iterators.
-
- #ifndef BCMAP_H
- #define BCMAP_H 1
-
- #include "BCType.h"
-
- template<class Item, class Value>
- class BC_TMapActiveIterator;
-
- template<class Item, class Value>
- class BC_TMapPassiveIterator;
-
- template<class Item, class Value, class Structure>
- class BC_TTablePersist;
-
- // Map abstract base class
-
- template<class Item, class Value>
- class BC_TMap {
- public:
-
- BC_TMap();
- BC_TMap(const BC_TMap<Item, Value>&);
- virtual ~BC_TMap();
-
- virtual BC_TMap<Item, Value>& operator=(const BC_TMap<Item, Value>&);
- virtual BC_Boolean operator==(const BC_TMap<Item, Value>&) const;
- BC_Boolean operator!=(const BC_TMap<Item, Value>&) const;
-
- virtual void SetHashFunction(BC_Index (*)(const Item&)) = 0;
- virtual void Clear() = 0;
- virtual BC_Boolean Bind(const Item&, const Value&) = 0;
- virtual BC_Boolean Rebind(const Item&, const Value&) = 0;
- virtual BC_Boolean Unbind(const Item&) = 0;
-
- virtual BC_Index Extent() const = 0;
- virtual BC_Boolean IsEmpty() const = 0;
- virtual BC_Boolean IsBound(const Item&) const = 0;
- virtual const Value* ValueOf(const Item&) const = 0;
- virtual Value* ValueOf(const Item&) = 0;
-
- protected:
-
- virtual void Purge() = 0;
- virtual BC_Boolean Attach(const Item&, const Value&) = 0;
- virtual BC_Index Cardinality() const = 0;
- virtual BC_Index NumberOfBuckets() const = 0;
- virtual BC_Index Length(BC_Index bucket) const = 0;
- virtual BC_Boolean Exists(const Item&) const = 0;
- virtual const Item& ItemAt(BC_Index bucket, BC_Index index) const = 0;
- virtual const Value& ValueAt(BC_Index bucket, BC_Index index) const = 0;
-
- virtual void Lock();
- virtual void Unlock();
-
- private:
-
- friend class BC_TMapActiveIterator<Item, Value>;
- friend class BC_TMapPassiveIterator<Item, Value>;
-
- friend class BC_TTablePersist<Item, Value, BC_TMap<Item, Value> >;
-
- };
-
- // Map iterators
-
- template <class Item, class Value>
- class BC_TMapActiveIterator {
- public:
-
- BC_TMapActiveIterator(const BC_TMap<Item, Value>&);
- ~BC_TMapActiveIterator();
-
- void Reset();
- BC_Boolean Next();
-
- BC_Boolean IsDone() const;
- const Item* CurrentItem() const;
- Item* CurrentItem();
- const Value* CurrentValue() const;
- Value* CurrentValue();
-
- protected:
-
- const BC_TMap<Item, Value>& fMap;
- BC_ExtendedIndex fBucketIndex;
- BC_ExtendedIndex fIndex;
-
- };
-
- template <class Item, class Value>
- class BC_TMapPassiveIterator {
- public:
-
- BC_TMapPassiveIterator(const BC_TMap<Item, Value>&);
- ~BC_TMapPassiveIterator();
-
- BC_Boolean Apply(BC_Boolean (*)(const Item&, const Value&));
- BC_Boolean Apply(BC_Boolean (*)(Item&, Value&));
-
- protected:
-
- const BC_TMap<Item, Value>& fMap;
-
- };
-
- #endif
-