/******************************************
*
* Cedric Pradalier 2001
* mail : http://cedric.pradalier.free.fr/mail.html
*
*****************************************/
#ifndef VECTOR_H
#define VECTOR_H
#include "Object.h"
/******************************************
tableau generique destine a recevoir des Object *
Sa taille est ajustee en utilisant le principe
de "Expanding Table" :
Si NbElem==Size : Size *= 2
Si NbElem==Size/4 : Size /= 2
La taille initiale est 2
La suppression ne maintient pas l'ordre d'insertion :
la suppression de l'element i echange les elements i et NbElem-1
et diminue le NbElem de 1.
Ex :
T : [........i........n-1]
suppr(i) :
Echange T : [........n-1........i]
Reduction T : [........n-1........]
******************************************/
class Vector : public Object
{
public:
Vector () {NbElem = 0 ; Size = 2 ; tElems = new (Object *)[2];}
virtual ~Vector () {delete [] tElems;}
/* supprime l'element i */
void deleteElement(int i);
/* ajoute elem en fin de tableau */
void addElement(Object * elem);
/* modifie l'elem i */
void setElement(int i,Object * elem);
/* Reduit le tableau a sa taille minimale */
void trimToSize();
/* Recupere l'element i */
Object * operator[](int i);
/* idem, plus facile a appele pour un Vector* */
Object * elementAt(int i);
/* Renvoie le Nb d'element */
int size() {return NbElem;}
/* Affiche le tableau */
virtual void Print();
/* Delete sur tous les éléments */
void deleteAll();
/* Trie le tableau en utilisant la propriete IsBetter */
void sort();
protected:
int NbElem,Size;
Object ** tElems;
};
#endif // VECTOR_H