/*============================================================================= File: barray_hpoint.cpp Purpose: Revision: $Id: barray_hpoint.cpp,v 1.4 2002/05/21 15:52:03 philosophil Exp $ Created by: Philippe Lavoie (3 Oct, 1996) Modified by: Copyright notice: Copyright (C) 1996-1998 Philippe Lavoie This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. =============================================================================*/ #include "barray.cpp" namespace PLib { template <> void resizeBasicArray(BasicArray >& a, int nsize){ resizeBasicArrayHPoint(a,nsize) ; } template <> void resizeBasicArray >(BasicArray >& a, int nsize){ resizeBasicArrayHPoint(a,nsize) ; } template <> void resizeBasicArray(BasicArray >& a, int nsize){ resizeBasicArrayHPoint(a,nsize) ; } template <> void resizeBasicArray(BasicArray >& a, int nsize){ resizeBasicArrayHPoint(a,nsize) ; } template void resizeBasicArrayHPoint(BasicArray >& a, int nsize){ int k=0; if ( nsize == a.rsize ){ a.sze = nsize ; return; // nothing to do } if(a.sze>nsize){ a.sze = nsize ; return ; } if((a.sze *xn ; xn = new NoInitHPoint_nD[nsize] ; T* data = new T[nsize*(D+1)]; for(k=nsize-1;k>=0;--k){ xn[k].data = data+ k*(D+1); } // The first data object will be responsible to delete the data array. xn[0].created = 1; if ( a.x ) { // copy the old data memcpy((void*)(xn[0].data),(void*)(a.x[0].data),a.sze*(D+1)*sizeof(T)) ; if(a.sze0 && a.destruct){ delete []a.x; } } else memset((void*)(xn[0].data),0,nsize*(D+1)*sizeof(T)) ; a.rsize = nsize; a.sze = a.rsize ; a.x = xn; a.destruct = 1 ; a.wdth = a.rsize + 1; } #ifdef NO_IMPLICIT_TEMPLATES template class BasicArray ; template void resizeBasicArrayHPoint(BasicArray&,int) ; template int operator!=(const BasicArray&,const BasicArray&); template int operator==(const BasicArray&,const BasicArray&); template istream& operator>>(istream& is, BasicArray& ary); template ostream& operator<<(ostream& os, const BasicArray& ary); template class BasicArray ; template void resizeBasicArrayHPoint(BasicArray&,int) ; template int operator!=(const BasicArray&,const BasicArray&); template int operator==(const BasicArray&,const BasicArray&); template istream& operator>>(istream& is, BasicArray& ary); template ostream& operator<<(ostream& os, const BasicArray& ary); template class BasicArray ; template void resizeBasicArrayHPoint(BasicArray&,int) ; template int operator!=(const BasicArray&,const BasicArray&); template int operator==(const BasicArray&,const BasicArray&); template istream& operator>>(istream& is, BasicArray& ary); template ostream& operator<<(ostream& os, const BasicArray& ary); template class BasicArray ; template void resizeBasicArrayHPoint(BasicArray&,int) ; template int operator!=(const BasicArray&,const BasicArray&); template int operator==(const BasicArray&,const BasicArray&); template istream& operator>>(istream& is, BasicArray& ary); template ostream& operator<<(ostream& os, const BasicArray& ary); #endif }