#pragma once #ifndef Cgarray_H #define Cgarray_H #define GARRAY_INCREMENT 100 #include "b_file.h" //array generico--------------------------------- /* Clase para manejar arrays genericos de cualquier tipo de clase o estructura */ template class Cgarray { public: //variables---------------------------------------------------------------------------------- int m; //cache del array int n; //numero de elementos en array int increment; //valor a incrementar en la cache T* ptr; //array de elementos //************************************************************** //constructores------------------------------------------------------------------------------- //************************************************************** Cgarray() { m=0; ptr=NULL; n=0; increment=GARRAY_INCREMENT; }; //************************************************************** Cgarray(int cache)//constructor poniendo en memoria posiciones { m=cache; ptr=(T*)malloc(sizeof(T)*m); if (ptr) memset(ptr,0,m * sizeof(T)); else m=0; n=0; increment=GARRAY_INCREMENT; }; //************************************************************** ~Cgarray() { if (ptr) free(ptr); }; //************************************************************** //funciones----------------------------------------------------------------------------------- //************************************************************** inline T& operator[](int i)//da el elemento i-esimo por referencia { return ptr[i]; }; //************************************************************** inline T* get(int i)//da el elemento i-esimo { return &ptr[i] ; }; //************************************************************** inline void remove(int ini, int nelem = 1) { if(ini<0) ini =0; if(ini>=n || nelem<1) return; int fin = ini+nelem; if(fin>=n) { n =ini; return; } memmove(&ptr[ini], &ptr[fin], (n-fin)*sizeof(T)); n-=(fin-ini); }; //************************************************************** inline BOOL operator+(T &e )//aņade nuevo elemento { T*pp; if (m0) { if (inc &e) //aņade una lista entera { int inc=n+e.n-m; T*pp; if (inc>0) { if (inc *e) //aņade una lista entera { int inc=n+e->n-m; T*pp; if (inc>0) { if (incptr,e.n*sizeof(T)); n+=e->n; return TRUE ; };*/ //************************************************************** inline BOOL add(T *e, int ne) //aņade una lista de elementos { int inc=n+ne-m; if (!e || ne<=0) return FALSE; T*pp; if (inc>0) { if (incescribe(&n,sizeof(n))) return FALSE; if(!file->escribe(ptr,n*sizeof(T))) return FALSE; return TRUE; } //************************************************************** inline BOOL leer(Cb_file *file)//lee de archivo el array { int nn; if(!file->lee(&nn,sizeof(n))) return FALSE; if( nn<=0 || !((*this)+=nn)) return FALSE; if(!file->lee(&ptr[n],nn*sizeof(T))) return FALSE; n+=nn; return TRUE; } //************************************************************** }; #endif