peterv%netscape.com 8a538c4480 Part of bug 88623 (Cleanup Transformiix code). Remove unnecesary comment lines, no code changes. r=Pike, rs=jst.
git-svn-id: svn://10.0.0.236/trunk@98504 18797224-902f-48f8-a5cc-f745e15eee43
2001-07-03 00:47:47 +00:00

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