42bddb770f
assoc.h Aggiunta macro di iterazione sugli elementi golem.h Aggiunta gestione della posta golem.cpp Suvvia c'e' la postaa, la posta eletrronicaaa mailbox.h Aggiunto vitrtual davanti al distruttore dei TMessage msksheet.h Aggiunte macro di iterazione sulle righe regexp.h Tolta #define di NULL strings.cpp Aggiunti metodi a TFilename: is_absolute_path, is_relative_path e make_absolute_path strings.h Tolta #include <regexp.h> (-1K nel file .mak) git-svn-id: svn://10.65.10.50/trunk@5626 c028cbd2-c16b-5b4b-a496-9718f37d4682
161 lines
5.0 KiB
C++
Executable File
161 lines
5.0 KiB
C++
Executable File
#ifndef __ASSOC_H
|
|
#define __ASSOC_H
|
|
|
|
#ifndef __STRINGS_H
|
|
#include <strings.h>
|
|
#endif
|
|
|
|
// @doc INTERNAL
|
|
|
|
// @class THash_object | Classe per la definizione degli elementi di una tabella hash.
|
|
//
|
|
// @base public | TObject
|
|
class THash_object : public TObject
|
|
|
|
// @author:(INTERNAL) Guido
|
|
|
|
{
|
|
// @cfriend TAssoc_array
|
|
friend class TAssoc_array;
|
|
|
|
// @access:(INTERNAL) Private Member
|
|
|
|
// @cmember:(INTERNAL) Chiave d'ordinamento
|
|
TString _key;
|
|
// @cmember:(INTERNAL) Oggetto della tabella da ordinare
|
|
TObject* _obj;
|
|
|
|
// @access Public Member
|
|
public:
|
|
|
|
// @cmember Ritorna la chiave di ordinamento
|
|
const TString& key() const
|
|
{ return _key; }
|
|
// @cmember Ritorna l'oggetto
|
|
TObject& obj() const
|
|
{ return *_obj; }
|
|
|
|
// @cmember Costruttore (inizializza la chiave ed opzionalmente l'oggetto)
|
|
THash_object(const char* k, TObject* o = NULL) : _key(k), _obj(o)
|
|
{}
|
|
// @cmember Distruttore
|
|
~THash_object()
|
|
{ if (_obj != NULL) delete _obj; }
|
|
};
|
|
|
|
|
|
// @doc EXTERNAL
|
|
|
|
// @class TAssoc_array | Tabella hash di oggetti generici
|
|
//
|
|
// @base public |TObject
|
|
class TAssoc_array : public TContainer
|
|
|
|
// @author:(INTERNAL) Guido
|
|
|
|
//@access:(INTERNAL) Private Member
|
|
{
|
|
// @ccost:(INTERNAL) HASH_SIZE | 113 | Dimensione della tabella hash
|
|
enum { HASH_SIZE = 113 };
|
|
// @cmember:(INTERNAL) Numero di oggetti contenuti nella tabella
|
|
word _cnt;
|
|
// @cmember:(INTERNAL) Numero di righe della tabella hash
|
|
word _row;
|
|
// @cmember:(INTERNAL) Numero di colonne della tabella hash
|
|
word _col;
|
|
// @cmember:(INTERNAL) Numero di righe della tabella hash per i metodi _item
|
|
int _rowitem;
|
|
// @cmember:(INTERNAL) Numero di colonne della tabella hash per i metodi _item
|
|
int _colitem;
|
|
// @cmember:(INTERNAL) Array contenente i dati veri e propri
|
|
TArray _data[HASH_SIZE];
|
|
|
|
// @access Protected member
|
|
protected:
|
|
|
|
// @cmember Cerca l'oggetto con chiave k
|
|
THash_object* _lookup(const char* k, bool& isnew, bool insert = FALSE);
|
|
// @cmember Copia tutto l'array associativo e ne duplica gli elementi
|
|
TAssoc_array & copy(const TAssoc_array & a);
|
|
|
|
// @access Public Member
|
|
public:
|
|
// @cmember Duplica l'array associativo copiandone gli elementi.
|
|
virtual TObject* dup () const { return new TAssoc_array(*this);}
|
|
|
|
// @cmember Ritorna un puntatore al primo oggetto
|
|
virtual TObject* first_item( );
|
|
// @cmember Ritorna un puntatore all'ultimo oggetto
|
|
virtual TObject* last_item( );
|
|
// @cmember Ritorna un puntatore all'oggetto successivo al quello corrente
|
|
virtual TObject* succ_item( );
|
|
// @cmember Ritorna un puntatore all'oggetto che precede quello corrente
|
|
virtual TObject* pred_item( );
|
|
|
|
// @cmember Ritorna il numero di elementi presenti come long
|
|
virtual long objects() { return _cnt; }
|
|
|
|
// @cmember Ritorna il numero di elementi presenti
|
|
int items() const { return _cnt; }
|
|
// @cmember Cancella tutti gli elementi
|
|
virtual void destroy();
|
|
|
|
// @cmember Aggiunge un oggetto. Se era gia' presente guarda il parametro force
|
|
bool add(const char* key, TObject* obj = NULL, bool force = FALSE);
|
|
|
|
// @cmember Aggiunge una copia dell'oggetto
|
|
bool add(const char* key, const TObject& obj, bool force = FALSE);
|
|
|
|
// @cmember Elimina un oggetto
|
|
bool remove(const char* key);
|
|
|
|
// @cmember Controlla l'esistenza di una chiave
|
|
bool is_key(const char* key) const ;
|
|
|
|
// @cmember Ritorna l'oggetto con chiave key
|
|
TObject* objptr(const char* key) const ;
|
|
|
|
// @cmember Trova l'oggetto indicizzato
|
|
TObject& find(const char* key) const ;
|
|
|
|
// @cmember Ritorna l'indice del oggetto con chiave key (piu' intuitivo di <mf TAssoc_array::find>)
|
|
TObject& operator[] (const char* key) const
|
|
{ return find(key); }
|
|
|
|
// iterazione come TToken_string
|
|
// si puo' adoperare get() e get_hashobj() intercambiabilmente ma
|
|
// non sono indipendenti (entrambe avanzano gli stessi contatori)
|
|
|
|
// @cmember Azzera il numero di riga e colonna corrente della tabella hash
|
|
void restart()
|
|
{ _row = 0; _col = 0; }
|
|
// @cmember Ritorna solo l'oggetto
|
|
TObject* get();
|
|
// @cmember Ritorna l'oggetto e la relativa chiave
|
|
THash_object* get_hashobj();
|
|
|
|
// @cmember Mette chiavi e opzionalmente valori (come stringa) nel <c TString_array> passato
|
|
int get_keys(TString_array& kl, bool add_values = FALSE);
|
|
// @cmember Operatore di assegnamento tra array associativi
|
|
TAssoc_array & operator= (const TAssoc_array & a)
|
|
{ return copy(a); }
|
|
|
|
// @cmember Costruttore
|
|
TAssoc_array() : _cnt(0), _row(0), _col(0)
|
|
{}
|
|
// @cmember Costruttore. Copia tutto l'array associativo e ne duplica gli elementi
|
|
TAssoc_array(const TAssoc_array & a) : _cnt(0), _row(0), _col(0)
|
|
{ copy(a); }
|
|
// @cmember Distruttore
|
|
virtual ~TAssoc_array()
|
|
{ destroy(); }
|
|
};
|
|
|
|
#define FOR_EACH_ASSOC_STRING(__ass, __obj, __key, __str) \
|
|
const char *__key, *__str; __ass.restart; \
|
|
for (THash_object* __obj = __ass.get_hashobj(); \
|
|
__obj && (__str = (const TString&)__obj->obj(), __key = __obj->key()); \
|
|
__obj = __ass.get_hashobj())
|
|
|
|
#endif
|