#ifndef CAT_MODELUTIL_H #define CAT_MODELUTIL_H /* * Utility functions for cat_model. * * Stuart Levy, slevy@ncsa.uiuc.edu * National Center for Supercomputing Applications, * University of Illinois 2001. * This file is part of partiview, released under the * Illinois Open Source License; see the file LICENSE.partiview for details. */ #include "shmem.h" class Shmem { /* Shared-memory allocator. */ public: void *operator new( size_t s ) { totalloc += s; return NewN( char, s ); } // void *operator new[]( size_t s ); void operator delete( void *p ) { Free(p); } // void operator delete[]( void *p ); /* Copy a string to shared memory */ static char *strdup( char *str ) { return shmstrdup(str); } static void *salloc( size_t s ) { totalloc += s; return NewN( char, s ); } static void sfree( void *p ) { Free(p); } static int totalloc; }; /* Extendable array of vect's, stored in CAVEMalloc'ed memory. * Should be a template. */ template <class T> class vvec : public Shmem { public: int count; /* Number of items defined in *v */ int room; /* Total space available in *v */ int ours; /* "May we sfree(v)?" */ T *v; /* Data */ vvec(); ~vvec(); void init(); vvec( int space ); /* initial estimate */ void init( int space ); /* ditto */ void use( T *buf, int space ); /* "Use this buffer" */ void trim( int excess = 0 ); /* trim to size, and ensure CAVEMalloc()ed */ T *needs( int nitems ); T *append(); /* Extend by 1, and return address of new item */ T *val( int index ); /* index'th item (extending if needed) */ }; #endif /*CAT_MODELUTIL_H*/