168 lines
3.7 KiB
C++
168 lines
3.7 KiB
C++
/*
|
|
* The contents of this file are subject to the Mozilla Public
|
|
* License Version 1.1 (the "License"); you may not use this file
|
|
* except in compliance with the License. You may obtain a copy of
|
|
* the License at http://www.mozilla.org/MPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS
|
|
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
* implied. See the License for the specific language governing
|
|
* rights and limitations under the License.
|
|
*
|
|
* The Original Code is XSL:P XSLT processor.
|
|
*
|
|
* The Initial Developer of the Original Code is Keith Visco.
|
|
*
|
|
* Portions created by Keith Visco (C) 1999-2000 Keith Visco.
|
|
* All Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
* Keith Visco, kvisco@ziplink.net
|
|
* -- original author.
|
|
*
|
|
*/
|
|
|
|
/*
|
|
* A Hashtable for TxObjects
|
|
*/
|
|
|
|
#ifndef TRANSFRMX_MAP_H
|
|
#define TRANSFRMX_MAP_H
|
|
|
|
#include "baseutils.h"
|
|
#include "TxObject.h"
|
|
#include "List.h"
|
|
|
|
class Map : public TxObject {
|
|
|
|
|
|
public:
|
|
|
|
//----------------/
|
|
//- Constructors -/
|
|
//----------------/
|
|
|
|
/**
|
|
* Creates a new Map with the default Size
|
|
**/
|
|
Map();
|
|
|
|
/**
|
|
* Creates a new Map with the specified number of buckets
|
|
**/
|
|
Map(int size);
|
|
|
|
/**
|
|
* Destructor for a Map table, will not delete references unless
|
|
* The setObjectDeletion flag has been set to MB_TRUE
|
|
**/
|
|
virtual ~Map();
|
|
|
|
|
|
/**
|
|
* Returns a list of all the keys of this Map.
|
|
*
|
|
* You will need to delete this List when you are done with it.
|
|
**/
|
|
List* keys();
|
|
|
|
/**
|
|
* Returns the object reference in this Map associated with the given name
|
|
* @return the object reference in this Map associated with the given name
|
|
**/
|
|
TxObject* get(TxObject* key);
|
|
|
|
/**
|
|
* Adds the TxObject reference to the map and associates it with the given
|
|
* key
|
|
**/
|
|
void put(TxObject* key, TxObject* obj);
|
|
|
|
/**
|
|
* enum used when setting ownership
|
|
**/
|
|
enum txMapOwnership
|
|
{
|
|
eOwnsNone = 0x00,
|
|
eOwnsItems = 0x01,
|
|
eOwnsKeys = 0x02,
|
|
eOwnsKeysAndItems = eOwnsItems | eOwnsKeys
|
|
};
|
|
|
|
/**
|
|
* Removes all elements from the Map. Deletes objects according
|
|
* to the mOwnership attribute
|
|
**/
|
|
void clear();
|
|
|
|
/**
|
|
* Returns true if there are no elements in this Map
|
|
* @return true if there are no elements in this Map.
|
|
**/
|
|
MBool isEmpty();
|
|
|
|
// THIS IS DEPRECATED
|
|
TxObject* remove(TxObject* key);
|
|
|
|
// THIS IS DEPRECATED, use setOwnership
|
|
void setObjectDeletion(MBool deleteObjects)
|
|
{
|
|
setOwnership(deleteObjects ? eOwnsKeysAndItems : eOwnsNone );
|
|
}
|
|
|
|
/**
|
|
* Sets the ownership attribute.
|
|
**/
|
|
void setOwnership(txMapOwnership aOwnership);
|
|
|
|
/**
|
|
* Returns the number of key-element pairs in the Map
|
|
* @return the number of key-element in the Map
|
|
**/
|
|
int size();
|
|
|
|
//-------------------/
|
|
//- Private Members -/
|
|
//-------------------/
|
|
|
|
|
|
private:
|
|
|
|
struct BucketItem {
|
|
TxObject* key;
|
|
TxObject* item;
|
|
BucketItem* next;
|
|
BucketItem* prev;
|
|
};
|
|
|
|
static const int DEFAULT_SIZE;
|
|
|
|
// map table
|
|
BucketItem** elements;
|
|
|
|
PRInt32 numberOfBuckets;
|
|
PRInt32 numberOfElements;
|
|
|
|
/**
|
|
* The ownership flag. Used to decide which objects are
|
|
* owned by the map and thus should be deleted when released
|
|
**/
|
|
txMapOwnership mOwnership;
|
|
|
|
//-------------------/
|
|
//- Private Methods -/
|
|
//-------------------/
|
|
|
|
BucketItem* createBucketItem(TxObject* key, TxObject* objPtr);
|
|
|
|
BucketItem* getBucketItem(TxObject* key);
|
|
|
|
/**
|
|
* Helper method for constructors
|
|
**/
|
|
void initialize(int size);
|
|
|
|
}; //-- NamedMap
|
|
|
|
#endif
|