6bac6177c4
Files correlati : Ricompilazione Demo : [ ] Commento : Aggiunte utili per gestione dizionario assoc.cpp Aggiunta possibilita' di selezionare un elemento causale di un assoc controls.cpp Corretta gestione scrollbar dei listbox diction.cpp Migliorata selezione caratteri da trimmare dalle traduzioni isam.cpp Corretto azzeramento dei memo (non azzerava il TString_array corrispondente) msksheet.cpp Resa personalizzabile la larghezza della colonna col numero di riga netsock.cpp Migliorata gestione "a capo" in protocollo soap progind.cpp Corretto posizionamento progind sovrapposte relapp.cpp Cambiato un messaggio di richiesta annullamento git-svn-id: svn://10.65.10.50/trunk@11651 c028cbd2-c16b-5b4b-a496-9718f37d4682
183 lines
5.8 KiB
C++
Executable File
183 lines
5.8 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
|
|
virtual ~THash_object();
|
|
};
|
|
|
|
// @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
|
|
{
|
|
// @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 _bucket;
|
|
|
|
// @access Protected member
|
|
protected:
|
|
TArray& bucket(int index);
|
|
|
|
// @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 un puntatore ad un THash_object casuale (anche NULL)
|
|
THash_object* random_hash_object();
|
|
|
|
// @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(); }
|
|
};
|
|
|
|
class TCache : public TObject
|
|
{
|
|
TArray _data;
|
|
|
|
protected:
|
|
virtual void discarding(const THash_object* obj);
|
|
virtual TObject* key2obj(const char* key) pure;
|
|
|
|
public:
|
|
TObject* objptr(const TString& key);
|
|
TObject* objptr(size_t nkey);
|
|
|
|
void destroy(); // Not very useful, but who knows?
|
|
TCache(size_t size = 0); // 883 assigned by default
|
|
virtual ~TCache();
|
|
};
|
|
|
|
#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()) != NULL, __obj && (__key = __obj->key()) != NULL); \
|
|
__obj = __ass.get_hashobj())
|
|
|
|
#define FOR_EACH_ASSOC_OBJECT(__ass, __obj, __key, __itm) \
|
|
const char *__key; TObject* __itm; __ass.restart(); \
|
|
for (THash_object* __obj = __ass.get_hashobj(); \
|
|
__obj && (__itm = &__obj->obj()) != NULL, __obj && (__key = __obj->key()) != NULL; \
|
|
__obj = __ass.get_hashobj())
|
|
|
|
#endif
|