Resa const la funzione items.
git-svn-id: svn://10.65.10.50/trunk@42 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
f18f97314b
commit
224ec2c260
182
include/assoc.h
182
include/assoc.h
@ -1,91 +1,91 @@
|
|||||||
#ifndef __ASSOC_H
|
#ifndef __ASSOC_H
|
||||||
#define __ASSOC_H
|
#define __ASSOC_H
|
||||||
|
|
||||||
#ifndef __ARRAY_H
|
#ifndef __ARRAY_H
|
||||||
#include <array.h>
|
#include <array.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef __STRINGS_H
|
#ifndef __STRINGS_H
|
||||||
#include <strings.h>
|
#include <strings.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
class THash_object : public TObject
|
class THash_object : public TObject
|
||||||
{
|
{
|
||||||
friend class TAssoc_array;
|
friend class TAssoc_array;
|
||||||
|
|
||||||
TString _key;
|
TString _key;
|
||||||
TObject* _obj;
|
TObject* _obj;
|
||||||
public:
|
public:
|
||||||
|
|
||||||
TString& key() { return _key; }
|
TString& key() { return _key; }
|
||||||
TObject& obj() { return *_obj; }
|
TObject& obj() { return *_obj; }
|
||||||
|
|
||||||
THash_object(const char* k)
|
THash_object(const char* k)
|
||||||
{ _key = k; }
|
{ _key = k; }
|
||||||
~THash_object() { if (_obj != NULL) delete _obj; }
|
~THash_object() { if (_obj != NULL) delete _obj; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class TAssoc_array : public TObject
|
class TAssoc_array : public TObject
|
||||||
{
|
{
|
||||||
enum { HASH_SIZE = 113 };
|
enum { HASH_SIZE = 113 };
|
||||||
word _cnt;
|
word _cnt;
|
||||||
word _row;
|
word _row;
|
||||||
word _col;
|
word _col;
|
||||||
TArray _data[HASH_SIZE];
|
TArray _data[HASH_SIZE];
|
||||||
|
|
||||||
THash_object* _lookup(const char* k, bool& isnew, bool insert = FALSE);
|
THash_object* _lookup(const char* k, bool& isnew, bool insert = FALSE);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
int items() { return _cnt; }
|
int items() const { return _cnt; }
|
||||||
|
|
||||||
void destroy();
|
void destroy();
|
||||||
|
|
||||||
// aggiunge oggetto; Se c'era gia' la chiave guarda force:
|
// aggiunge oggetto; Se c'era gia' la chiave guarda force:
|
||||||
// se force = TRUE lo sostituisce e ritorna TRUE
|
// se force = TRUE lo sostituisce e ritorna TRUE
|
||||||
// se force = FALSE non sostituisce e ritorna TRUE
|
// se force = FALSE non sostituisce e ritorna TRUE
|
||||||
// altrimenti ritorna FALSE
|
// altrimenti ritorna FALSE
|
||||||
bool add(const char* key, TObject* obj = NULL, bool force = FALSE);
|
bool add(const char* key, TObject* obj = NULL, bool force = FALSE);
|
||||||
|
|
||||||
// aggiunge copia oggetto (deve avere dup()). Vedi l'altra
|
// aggiunge copia oggetto (deve avere dup()). Vedi l'altra
|
||||||
// per i parametri
|
// per i parametri
|
||||||
bool add(const char* key, const TObject& obj, bool force = FALSE);
|
bool add(const char* key, const TObject& obj, bool force = FALSE);
|
||||||
|
|
||||||
// elimina oggetto; ritorna FALSE se non c'era
|
// elimina oggetto; ritorna FALSE se non c'era
|
||||||
bool remove(const char* key);
|
bool remove(const char* key);
|
||||||
|
|
||||||
// trova oggetto indicizzato; check se non c'e'
|
// trova oggetto indicizzato; check se non c'e'
|
||||||
// normalmente si usa operator[key]
|
// normalmente si usa operator[key]
|
||||||
// se l'oggetto aggiunto era NULL ritorna error object
|
// se l'oggetto aggiunto era NULL ritorna error object
|
||||||
TObject& find(const char* key);
|
TObject& find(const char* key);
|
||||||
|
|
||||||
// ritorna puntatore o NULL
|
// ritorna puntatore o NULL
|
||||||
TObject* objptr(const char* key);
|
TObject* objptr(const char* key);
|
||||||
|
|
||||||
// TRUE se la chiave c'e', FALSE altrimenti
|
// TRUE se la chiave c'e', FALSE altrimenti
|
||||||
bool is_key(const char* key);
|
bool is_key(const char* key);
|
||||||
|
|
||||||
// l'indice e' un po' strano ma si usera' questa poiche'
|
// l'indice e' un po' strano ma si usera' questa poiche'
|
||||||
// 1) e' intuitivo
|
// 1) e' intuitivo
|
||||||
// 2) fa molto figo
|
// 2) fa molto figo
|
||||||
TObject& operator[] (const char* key) { return find(key); }
|
TObject& operator[] (const char* key) { return find(key); }
|
||||||
|
|
||||||
// iterazione come TToken_string
|
// iterazione come TToken_string
|
||||||
// si puo' adoperare get() e get_hashobj() intercambiabilmente ma
|
// si puo' adoperare get() e get_hashobj() intercambiabilmente ma
|
||||||
// non sono indipendenti (entrambe avanzano gli stessi contatori)
|
// non sono indipendenti (entrambe avanzano gli stessi contatori)
|
||||||
|
|
||||||
TObject* get(); // ritorna solo l'object
|
TObject* get(); // ritorna solo l'object
|
||||||
THash_object* get_hashobj(); // se serve anche la chiave
|
THash_object* get_hashobj(); // se serve anche la chiave
|
||||||
void restart() { _row = 0; _col = 0; }
|
void restart() { _row = 0; _col = 0; }
|
||||||
|
|
||||||
TAssoc_array() : _cnt(0), _row(0), _col(0) {}
|
TAssoc_array() : _cnt(0), _row(0), _col(0) {}
|
||||||
virtual ~TAssoc_array() { destroy(); }
|
virtual ~TAssoc_array() { destroy(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user