1994-08-22 09:07:02 +00:00
|
|
|
#ifndef __ASSOC_H
|
|
|
|
#define __ASSOC_H
|
|
|
|
|
|
|
|
#ifndef __STRINGS_H
|
|
|
|
#include <strings.h>
|
|
|
|
#endif
|
|
|
|
|
1995-05-10 10:40:40 +00:00
|
|
|
// @doc EXTERNAL
|
|
|
|
//
|
1995-05-10 16:12:51 +00:00
|
|
|
// @class THash_object | Classe per la definizione degli elementi di una tabella hash.
|
1995-05-10 10:40:40 +00:00
|
|
|
//
|
|
|
|
// @base public | TObject
|
1994-08-22 09:07:02 +00:00
|
|
|
class THash_object : public TObject
|
|
|
|
{
|
1995-07-21 17:27:58 +00:00
|
|
|
// @cfriend TAssoc_array
|
1994-08-22 09:07:02 +00:00
|
|
|
friend class TAssoc_array;
|
|
|
|
|
1995-05-10 10:40:40 +00:00
|
|
|
// @access Private Member
|
|
|
|
|
|
|
|
// @cmember Chiave d'ordinamento
|
1994-08-22 09:07:02 +00:00
|
|
|
TString _key;
|
1995-05-10 10:40:40 +00:00
|
|
|
// @cmember Oggetto della tabella da ordinare
|
1994-08-22 09:07:02 +00:00
|
|
|
TObject* _obj;
|
1995-04-10 15:28:03 +00:00
|
|
|
|
1995-05-10 10:40:40 +00:00
|
|
|
// @access Public Member
|
1994-08-22 09:07:02 +00:00
|
|
|
public:
|
|
|
|
|
1995-05-10 10:40:40 +00:00
|
|
|
// @cmember Ritorna la chiave di ordinamento
|
|
|
|
TString& key()
|
|
|
|
{ return _key; }
|
|
|
|
// @cmember Ritorna l'oggetto
|
|
|
|
TObject& obj()
|
|
|
|
{ return *_obj; }
|
|
|
|
|
|
|
|
// @cmember Costruttore (inizializza la chiave)
|
|
|
|
THash_object(const char* k) : _key(k), _obj(NULL)
|
|
|
|
{}
|
|
|
|
// @cmember Distruttore
|
|
|
|
~THash_object()
|
|
|
|
{ if (_obj != NULL) delete _obj; }
|
1994-08-22 09:07:02 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
1995-05-10 10:40:40 +00:00
|
|
|
// @class TAssoc_array | Tabella hash di oggetti generici
|
|
|
|
//
|
|
|
|
// @base public |TObject
|
1994-08-22 09:07:02 +00:00
|
|
|
class TAssoc_array : public TObject
|
|
|
|
{
|
1995-05-10 10:40:40 +00:00
|
|
|
|
|
|
|
//@access Private Member
|
|
|
|
|
1995-07-21 17:27:58 +00:00
|
|
|
// @ccost HASH_SIZE | 113 | Dimensione della tabella hash
|
1995-05-10 10:40:40 +00:00
|
|
|
enum { HASH_SIZE = 113 };
|
|
|
|
// @cmember Numero di oggetti contenuti nella tabella
|
|
|
|
word _cnt;
|
|
|
|
// @cmember Numero di righe della tabella hash
|
|
|
|
word _row;
|
|
|
|
// @cmember Numero di colonne della tabella hash
|
|
|
|
word _col;
|
|
|
|
// @cmember Array contenente i dati veri e propri
|
|
|
|
TArray _data[HASH_SIZE];
|
1995-04-10 15:28:03 +00:00
|
|
|
|
1995-05-10 10:40:40 +00:00
|
|
|
// @access Protected member
|
|
|
|
protected:
|
|
|
|
|
|
|
|
// @cmember Cerca l'oggetto con chiave k
|
1994-08-22 09:07:02 +00:00
|
|
|
THash_object* _lookup(const char* k, bool& isnew, bool insert = FALSE);
|
|
|
|
|
1995-05-10 10:40:40 +00:00
|
|
|
// @access Public Member
|
1994-08-22 09:07:02 +00:00
|
|
|
public:
|
|
|
|
|
1995-05-10 10:40:40 +00:00
|
|
|
// @cmember Ritorna il numero di elementi presenti
|
|
|
|
int items() const
|
|
|
|
{ return _cnt; }
|
|
|
|
|
|
|
|
// @cmember Cancella tutti gli elementi
|
1995-04-10 15:28:03 +00:00
|
|
|
virtual void destroy();
|
1994-08-22 09:07:02 +00:00
|
|
|
|
1995-05-10 10:40:40 +00:00
|
|
|
// @cmember Aggiunge un oggetto. Se era gia' presente guarda il parametro force
|
1994-08-22 09:07:02 +00:00
|
|
|
bool add(const char* key, TObject* obj = NULL, bool force = FALSE);
|
|
|
|
|
1995-05-10 10:40:40 +00:00
|
|
|
// @cmember Aggiunge una copia dell'oggetto
|
1994-08-22 09:07:02 +00:00
|
|
|
bool add(const char* key, const TObject& obj, bool force = FALSE);
|
|
|
|
|
1995-05-10 10:40:40 +00:00
|
|
|
// @cmember Elimina un oggetto
|
1994-08-22 09:07:02 +00:00
|
|
|
bool remove(const char* key);
|
|
|
|
|
1995-05-10 10:40:40 +00:00
|
|
|
// @cmember Trova l'oggetto indicizzato
|
1994-08-22 09:07:02 +00:00
|
|
|
TObject& find(const char* key);
|
|
|
|
|
1995-05-10 10:40:40 +00:00
|
|
|
// @cmember Ritorna l'oggetto con chiave key
|
1994-08-22 09:07:02 +00:00
|
|
|
TObject* objptr(const char* key);
|
|
|
|
|
1995-05-10 10:40:40 +00:00
|
|
|
// @cmember Controlla l'esistenza di una chiave
|
|
|
|
bool is_key(const char* key);
|
1994-08-22 09:07:02 +00:00
|
|
|
|
1995-07-21 17:27:58 +00:00
|
|
|
// @cmember Ritorna l'indice del oggetto con chiave key (piu' intuitivo di <mf TAssoc_array::find>)
|
1995-05-10 10:40:40 +00:00
|
|
|
TObject& operator[] (const char* key)
|
|
|
|
{ return find(key); }
|
1994-08-22 09:07:02 +00:00
|
|
|
|
|
|
|
// iterazione come TToken_string
|
|
|
|
// si puo' adoperare get() e get_hashobj() intercambiabilmente ma
|
|
|
|
// non sono indipendenti (entrambe avanzano gli stessi contatori)
|
|
|
|
|
1995-05-10 10:40:40 +00:00
|
|
|
// @cmember Ritorna solo l'oggetto
|
|
|
|
TObject* get();
|
|
|
|
// @cmember Ritorna l'oggetto e la relativa chiave
|
|
|
|
THash_object* get_hashobj();
|
|
|
|
// @cmember Azzera il numero di righe e colonne della tabella hash
|
|
|
|
void restart()
|
|
|
|
{ _row = 0; _col = 0; }
|
|
|
|
|
|
|
|
// @cmember Costruttore
|
|
|
|
TAssoc_array() : _cnt(0), _row(0), _col(0)
|
|
|
|
{}
|
|
|
|
// @cmember Distruttore
|
1994-08-22 09:07:02 +00:00
|
|
|
virtual ~TAssoc_array() { destroy(); }
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|