Update of /cvsroot/pure-data/externals/grill/flext/source In directory sc8-pr-cvs1:/tmp/cvs-serv27499/source
Modified Files: flbuf.cpp fldsp.cpp flsupport.cpp flsupport.h Log Message: ""
Index: flbuf.cpp =================================================================== RCS file: /cvsroot/pure-data/externals/grill/flext/source/flbuf.cpp,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** flbuf.cpp 12 Aug 2003 02:32:51 -0000 1.15 --- flbuf.cpp 29 Nov 2003 03:32:48 -0000 1.16 *************** *** 195,199 **** if(keep) { // copy buffer data to tmp storage ! tmp = new t_sample[sz]; if(tmp) CopySamples(tmp,data,sz); --- 195,199 ---- if(keep) { // copy buffer data to tmp storage ! tmp = (t_sample *)NewAligned(sz*sizeof(t_sample)); if(tmp) CopySamples(tmp,data,sz); *************** *** 216,220 **** // copy data back CopySamples(data,tmp,sz); ! delete[] tmp; if(zero && sz < fr) ZeroSamples(data+sz,fr-sz); } --- 216,220 ---- // copy data back CopySamples(data,tmp,sz); ! FreeAligned(tmp); if(zero && sz < fr) ZeroSamples(data+sz,fr-sz); }
Index: fldsp.cpp =================================================================== RCS file: /cvsroot/pure-data/externals/grill/flext/source/fldsp.cpp,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** fldsp.cpp 14 Aug 2003 02:32:51 -0000 1.19 --- fldsp.cpp 29 Nov 2003 03:32:48 -0000 1.20 *************** *** 17,22 **** #include <string.h>
- - // === flext_dsp ==============================================
--- 17,20 ----
Index: flsupport.cpp =================================================================== RCS file: /cvsroot/pure-data/externals/grill/flext/source/flsupport.cpp,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -d -r1.24 -r1.25 *** flsupport.cpp 19 Nov 2003 03:32:54 -0000 1.24 --- flsupport.cpp 29 Nov 2003 03:32:48 -0000 1.25 *************** *** 89,106 **** /////////////////////////////////////////////////////////
void *flext_root::operator new(size_t bytes) { bytes += sizeof(size_t);
! #ifdef FLEXT_DEBUG ! if(bytes > 32000) ! post("flext - warning: excessive memory allocation of %i bytes",bytes); ! #endif
#if FLEXT_SYS == FLEXT_SYS_JMAX ! char *blk = (char *)::fts_malloc(bytes); #else ! char *blk = (char *)::getbytes(bytes); #endif
*(size_t *)blk = bytes; --- 89,112 ---- /////////////////////////////////////////////////////////
+ #define LARGEALLOC 32000 + void *flext_root::operator new(size_t bytes) { bytes += sizeof(size_t);
! char *blk; ! if(bytes >= LARGEALLOC) { ! // use C library function for large memory blocks ! blk = (char *)::operator new(bytes); ! } ! else { ! //! \todo We need system locking here for secondary threads!
#if FLEXT_SYS == FLEXT_SYS_JMAX ! blk = (char *)::fts_malloc(bytes); #else ! blk = (char *)::getbytes(bytes); #endif + }
*(size_t *)blk = bytes; *************** *** 111,121 **** { char *ori = (char *)blk-sizeof(size_t);
#if FLEXT_SYS == FLEXT_SYS_JMAX ! fts_free(ori); #else ! size_t bytes = *(size_t *)ori; ! ::freebytes(ori,bytes); #endif }
--- 117,135 ---- { char *ori = (char *)blk-sizeof(size_t); + size_t bytes = *(size_t *)ori; + + if(bytes >= LARGEALLOC) { + // use C library function for large memory blocks + ::operator delete(ori); + } + else { + //! \todo We need system locking here for secondary threads!
#if FLEXT_SYS == FLEXT_SYS_JMAX ! fts_free(ori); #else ! ::freebytes(ori,bytes); #endif + } }
*************** *** 126,134 **** bytes += ovh+alignovh;
#if FLEXT_SYS == FLEXT_SYS_JMAX ! char *blk = (char *)::fts_malloc(bytes); #else ! char *blk = (char *)::getbytes(bytes); #endif
char *ablk = reinterpret_cast<char *>((reinterpret_cast<unsigned long>(blk)+ovh+alignovh) & ~alignovh); --- 140,157 ---- bytes += ovh+alignovh;
+ char *blk; + if(bytes >= LARGEALLOC) { + // use C library function for large memory blocks + blk = (char *)::operator new(bytes); + } + else { + //! \todo We need system locking here for secondary threads! + #if FLEXT_SYS == FLEXT_SYS_JMAX ! blk = (char *)::fts_malloc(bytes); #else ! blk = (char *)::getbytes(bytes); #endif + }
char *ablk = reinterpret_cast<char *>((reinterpret_cast<unsigned long>(blk)+ovh+alignovh) & ~alignovh); *************** *** 141,151 **** { char *ori = *(char **)((char *)blk-sizeof(size_t)-sizeof(char *));
#if FLEXT_SYS == FLEXT_SYS_JMAX ! fts_free(ori); #else ! size_t bytes = *(size_t *)((char *)blk-sizeof(size_t)); ! ::freebytes(ori,bytes); #endif }
--- 164,182 ---- { char *ori = *(char **)((char *)blk-sizeof(size_t)-sizeof(char *)); + size_t bytes = *(size_t *)((char *)blk-sizeof(size_t)); + + if(bytes >= LARGEALLOC) { + // use C library function for large memory blocks + ::operator delete(ori); + } + else { + //! \todo We need system locking here for secondary threads!
#if FLEXT_SYS == FLEXT_SYS_JMAX ! fts_free(ori); #else ! ::freebytes(ori,bytes); #endif + } }
Index: flsupport.h =================================================================== RCS file: /cvsroot/pure-data/externals/grill/flext/source/flsupport.h,v retrieving revision 1.55 retrieving revision 1.56 diff -C2 -d -r1.55 -r1.56 *** flsupport.h 13 Nov 2003 03:33:09 -0000 1.55 --- flsupport.h 29 Nov 2003 03:32:48 -0000 1.56 *************** *** 55,65 **** #endif
- /*! Get a large memory block - the normal C library function is used here - */ - static void *NewLarge(size_t bytes) { return ::operator new(bytes); } - //! Free a large memory block - static void FreeLarge(void *blk) { ::operator delete(blk); } - //! Get an aligned memory block static void *NewAligned(size_t bytes,int bitalign = 128); --- 55,58 ---- *************** *** 70,77 **** return (reinterpret_cast<unsigned long>(ptr)&(bitalign-1)) == 0; } - //! @} FLEXT_S_MEMORY - };
--- 63,77 ---- return (reinterpret_cast<unsigned long>(ptr)&(bitalign-1)) == 0; } //! @} FLEXT_S_MEMORY }; + + // define global new/delete operators + inline void *operator new(size_t bytes) { return flext_root::operator new(bytes); } + inline void operator delete(void *blk) { flext_root::operator delete(blk); } + #ifndef __MRC__ // doesn't allow new[] overloading?! + inline void *operator new[](size_t bytes) { return flext_root::operator new[](bytes); } + inline void operator delete[](void *blk) { flext_root::operator delete[](blk); } + #endif +