#pragma once #define GARRAY_INCREMENT 100 //cola generico--------------------------------- //+cosas por le final //-por el inicio template struct Element_Cgcola { T t; Element_Cgcola *ant; Element_Cgcola *sig; }; template class Cgcola { public: //variables---------------------------------------------------------------------------------- int n; //numero de elementos en array Element_Cgcola *ini; //inicio del array Element_Cgcola *fin; //fin del array //************************************************************** //constructores------------------------------------------------------------------------------- //************************************************************** Cgcola() { ini=fin=NULL; n=0; }; //************************************************************** ~Cgcola() { borra(); }; //************************************************************** //funciones----------------------------------------------------------------------------------- //************************************************************** virtual inline T* operator++()//da puntero al ultimo elemento { if (fin) return &fin->t; return NULL; }; //************************************************************** virtual inline T* operator--()//da puntero al primero { if(ini) return &ini->t; return NULL; }; //************************************************************** virtual inline BOOL operator+(T &e )//aņade al final { if (fin) { fin->sig=(Element_Cgcola*)malloc(sizeof(Element_Cgcola)); if (!fin->sig) return FALSE; fin->sig->ant=fin; fin=fin->sig; } else { fin=(Element_Cgcola*)malloc(sizeof(Element_Cgcola)); if (!fin) return FALSE; ini=fin; fin->ant=NULL; } fin->t=e; fin->sig=NULL; n++; return TRUE ; }; //************************************************************** virtual inline BOOL operator-(T &e) //aņade al principio { if (ini) { ini->ant=(Element_Cgcola*)malloc(sizeof(Element_Cgcola)); if (!ini->ant) return FALSE; ini->ant->sig=ini; ini=ini->ant; } else { ini=(Element_Cgcola*)malloc(sizeof(Element_Cgcola)); if (!ini) return FALSE; fin=ini; ini->sig=NULL; } ini->t=e; ini->ant=NULL; n++; return TRUE ; }; //************************************************************** virtual inline BOOL operator+=(T* e )//da el ultimo u lo elimina { if (!fin) return FALSE; *e=fin->t; Element_Cgcola *el=fin; fin=fin->ant; fin->sig=NULL; if (!fin) ini=fin; free(el); n--; return TRUE ; }; //************************************************************** virtual inline BOOL operator-=(T* e )//da el primero y lo elimina { if (!ini) return FALSE; *e=ini->t; Element_Cgcola *el=ini; ini=ini->sig; if (!ini) fin=ini; else ini->ant=NULL; free(el); n--; return TRUE ; }; //************************************************************** virtual inline void borra()//libera la memoria del array { while(ini) { fin=ini->sig; free(ini); ini=fin; } } //************************************************************** };