diff --git a/GdataTable.cpp b/GdataTable.cpp index bc09d98..80d9a93 100644 --- a/GdataTable.cpp +++ b/GdataTable.cpp @@ -160,6 +160,84 @@ bool GdataTable::addColm(char* name, int type, int size) return false; return true; } +//*************************************************************************** +bool GdataTable::InsertColm(int icol, char* name, int type, int size) +{ + return false; + /*if(icol (); + if (!inf.nb) + inf.nb = sizeof(bool); + if (nn > 0) + { + if (!((*(Cgarray*)c) += nn)) + return false; + ((Cgarray*)c)->n = nn; + } + break; + case(Tint): + c = new Cgarray(); + inf.nb = sizeof(long); + if (nn > 0) + { + if (!((*(Cgarray*)c) += nn)) + return false; + ((Cgarray*)c)->n = nn; + } + break; + case(Tdouble): + c = new Cgarray(); + inf.nb = sizeof(double); + if (nn > 0) + { + if (!((*(Cgarray*)c) += nn)) + return false; + ((Cgarray*)c)->n = nn; + } + break; + case(Tint64): + c = new Cgarray<__int64>(); + inf.nb = sizeof(__int64); + if (nn > 0) + { + if (!((*(Cgarray<__int64>*)c) += nn)) + return false; + ((Cgarray<__int64>*)c)->n = nn; + } + break; + case(Tstring): + case(Tbin): + c = new Cgarray(); + if (nn > 0) + { + if (!((*(Cgarray*)c) += (nn*inf.nb))) + return false; + ((Cgarray*)c)->n = (nn*inf.nb); + } + break; + default: + return false; + } + if (!c) + return false; + if (!(buf + c)) + return false; + if (!(colm + inf)) + return false; + return true; +} + //*************************************************************************** void GdataTable::delAll() { diff --git a/GdataTable.h b/GdataTable.h index 8c472f4..64252b5 100644 --- a/GdataTable.h +++ b/GdataTable.h @@ -56,6 +56,8 @@ public: //adicionar----------------------------- bool addColm(char* name, int type, int size=0); + bool InsertColm(int icol, char* name, int type, int size = 0); + bool addRow(int nrow); bool addMemRow(int nrow); //borrado------------------------------- diff --git a/garray.h b/garray.h index 573257f..564ae2c 100644 --- a/garray.h +++ b/garray.h @@ -199,6 +199,24 @@ public: return TRUE ; };*/ //************************************************************** + inline BOOL insert(int pos, T *e, int ne = 1) //inserta apartir de la posicion pos los elementos de la lista, desplaza los existentes para alante + { + if (pos >= n) + return add(e, ne); + int inc = n + ne - m; + if (!e || ne <= 0) + return FALSE; + if (!operator+=(inc)) + return false; + //adelanta los elementos necesarios + for (int i = n - 1; i >= pos; i--) + ptr[i + ne] = ptr[i]; + + memcpy(&ptr[pos], e, ne * sizeof(T)); + n += ne; + return TRUE; + }; + //************************************************************** inline BOOL add(T *e, int ne) //aņade una lista de elementos { int inc=n+ne-m;