Main Page   Class Hierarchy   Compound List   File List   Header Files   Compound Members   File Members  

asyncMalloc.h

This is the verbatim text of the asyncMalloc.h include file.
/* Sun-$Revision: 23.4 $ */

/* Copyright 1992-9 Sun Microsystems, Inc. and Stanford University.
   See the LICENSE file for license information. */

# pragma interface

// A simple allocator which allows you to use malloc in signal handlers
// as long as you don't exceed the buffer capacity (the buffer is refilled
// at every allocation if possible).

class AsyncAllocator {
  int32  size;          // size of elements
  int32  capacity;      // buffer capacity
  int32  n;             // current size of buffer
  char** buf;

 public:
  void* operator new(size_t size) { return ::selfs_malloc(size); }
  AsyncAllocator(int32 elemSize, int32 bufSize);
  ~AsyncAllocator();

  char* async_malloc(size_t s) {
    if (s != size) fatal("wrong size");
    if (MallocInProgress || n != capacity) {
      return async_malloc_elem();
    } else {
      return (char*)::selfs_malloc(s);
    }
  }

  void async_free(void* ptr) {
    if (MallocInProgress || n != capacity) {
      async_free_elem(ptr);
    } else {
      ::selfs_free(ptr);
    }
  }
 protected:
  char* async_malloc_elem();
  void  async_free_elem(void* ptr);
  void  balanceBuffer(int32 howMany);
};

Generated at Tue Jun 27 12:07:07 2000 for SelfVM by doxygen 1.0.0 written by Dimitri van Heesch, © 1997-1999