Aggiunto TContainer

git-svn-id: svn://10.65.10.50/trunk@2189 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
matteo 1995-11-22 13:37:04 +00:00
parent b162971038
commit 3b4b9ae254
2 changed files with 79 additions and 1 deletions

@ -50,6 +50,68 @@ void TAssoc_array::destroy()
_cnt = _row = _col = 0;
}
TObject* TAssoc_array::first_item( )
{
_rowitem = 0;
_colitem = 0;
return succ_item( );
}
TObject* TAssoc_array::last_item( )
{
_rowitem = HASH_SIZE - 1;
while( _rowitem >= 0 && _data[ _rowitem ].items() == 0 )
_rowitem --;
if( _rowitem < 0 )
return NULL;
const TArray* arr = &_data[_rowitem];
_colitem = arr->items( ) - 1;
return pred_item( );
}
TObject* TAssoc_array::succ_item( )
{
const TArray* arr = &_data[_rowitem];
for(;_rowitem < HASH_SIZE;)
{
if ((int)_colitem < arr->items())
break;
arr = &_data[++_rowitem];
_colitem = 0;
}
if (_rowitem == HASH_SIZE)
return NULL;
THash_object* o = (THash_object*)arr->objptr(_colitem++);
return (o == NULL || o->_obj == NULL) ? NULL : o->_obj;
}
TObject* TAssoc_array::pred_item( )
{
const TArray* arr = &_data[_rowitem];
for(;_rowitem >= 0;)
{
if ((int)_colitem >= 0 )
break;
_rowitem --;
while( _rowitem >= 0 && _data[ _rowitem ].items( ) == 0 )
_rowitem --;
if (_rowitem < 0 )
return NULL;
arr = &_data[ _rowitem ];
_colitem = arr->items( ) - 1;
}
if (_rowitem < 0 )
return NULL;
THash_object* o = (THash_object*)arr->objptr(_colitem--);
return (o == NULL || o->_obj == NULL) ? NULL : o->_obj;
}
// @mfunc Aggiunge un oggetto all'array.
bool TAssoc_array::add(
const char* key, // @parm Chiave d'ordinamento

@ -44,7 +44,7 @@ public:
// @class TAssoc_array | Tabella hash di oggetti generici
//
// @base public |TObject
class TAssoc_array : public TObject
class TAssoc_array : public TContainer
{
//@access Private Member
@ -57,6 +57,10 @@ class TAssoc_array : public TObject
word _row;
// @cmember Numero di colonne della tabella hash
word _col;
// @cmember Numero di righe della tabella hash per i metodi _item
int _rowitem;
// @cmember Numero di colonne della tabella hash per i metodi _item
int _colitem;
// @cmember Array contenente i dati veri e propri
TArray _data[HASH_SIZE];
@ -73,6 +77,18 @@ public:
int items() const
{ return _cnt; }
// @cmember Ritorna l'indice del primo oggetto
virtual TObject* first_item( );
// @cmember Ritorna l'indice dell'ultimo oggetto
virtual TObject* last_item( );
// @cmember Ritorna l'indice del primo oggetto dopo i
virtual TObject* succ_item( );
// @cmember Ritorna l'indice del primo oggetto che precede i
virtual TObject* pred_item( );
// @cmember Ritorna il numero di elementi presenti come long
long objects( )
{ return _cnt; }
// @cmember Cancella tutti gli elementi
virtual void destroy();