summaryrefslogtreecommitdiff
path: root/proofs/lfsc_checker/chunking_memory_management.h
diff options
context:
space:
mode:
Diffstat (limited to 'proofs/lfsc_checker/chunking_memory_management.h')
-rw-r--r--proofs/lfsc_checker/chunking_memory_management.h157
1 files changed, 0 insertions, 157 deletions
diff --git a/proofs/lfsc_checker/chunking_memory_management.h b/proofs/lfsc_checker/chunking_memory_management.h
deleted file mode 100644
index bdf938d32..000000000
--- a/proofs/lfsc_checker/chunking_memory_management.h
+++ /dev/null
@@ -1,157 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////
-// //
-// Copyright (C) 2002 by the Board of Trustees of Leland Stanford //
-// Junior University. See LICENSE for details. //
-// //
-///////////////////////////////////////////////////////////////////////////////
-/* chunking_memory_management.h
- Aaron Stump, 6/11/99
-
- This file contains macros that allow you easily to add chunking
- memory management for classes.
-
- RCS Version: $Id: chunking_memory_management.h,v 1.1 2004/11/12 16:26:19 stump Exp $
-
-*/
-#ifndef _chunking_memory_management_h_
-#define _chunking_memory_management_h_
-
-#include <assert.h>
-
-/************************************************************************
- * MACRO: ADD_CHUNKING_MEMORY_MANAGEMENT_H()
- * Aaron Stump, 6/11/99
- *
- * ABSTRACT: This macro should be called exactly once inside the body
- * of the declaration of the class THE_CLASS to add chunking memory
- * management for the class. That class should not itself declare the
- * operators new and delete. The macro
- * C_MACROS__ADD_CHUNKING_MEMORY_MANAGEMENT_CC should be called with
- * the same value for THE_CLASS in a .cc file for that class.
- *
- * NOTE that the access specifier will be public after calling this
- * macro.
- *
- * THE_FIELD is a field of the class to use for the next pointer in the
- * free list data structure. It can be of any type, but must have enough
- * space to hold a pointer.
- ************************************************************************/
-#define C_MACROS__ADD_CHUNKING_MEMORY_MANAGEMENT_H(THE_CLASS,THE_FIELD) \
-private:\
- static unsigned C_MACROS__CHUNK_SIZE;\
- static unsigned C_MACROS__BLOCK_SIZE;\
- static void *C_MACROS__freelist;\
- static bool C_MACROS__initialized;\
- static char *C_MACROS__next_free_block;\
- static char *C_MACROS__end_of_current_chunk;\
- \
- static void C_MACROS__allocate_new_chunk();\
-\
-public:\
- static void C_MACROS__init_chunks() {\
- if (!C_MACROS__initialized) {\
- C_MACROS__allocate_new_chunk();\
- C_MACROS__initialized = true;\
- }\
- }\
-\
- static void *operator new(size_t size, void *h = NULL);\
- static void operator delete(void *ptr)\
-
-
-/************************************************************************
- * MACRO: ADD_CHUNKING_MEMORY_MANAGEMENT_CC()
- * Aaron Stump, 6/11/99
- *
- * ABSTRACT: This macro should be called exactly once in a .cc file
- * for the class THE_CLASS to add chunking memory management for the
- * class. This macro should be called with the same value for
- * THE_CLASS as was used in calling
- * C_MACROS__ADD_CHUNKING_MEMORY_MANAGEMENT_H in the body of the
- * declaration of THE_CLASS. THE_CHUNK_SIZE is the number of blocks
- * of memory to get at once using malloc(). A block is the portion
- * of memory needed for one instance of THE_CLASS.
- *
- *
- * IMPLEMENTATION:
- ************************************************************************
- * FUNCTION: allocate_new_chunk()
- * Aaron Stump, 6/8/99
- *
- * ABSTRACT: This method allocates a new chunk of memory to use for
- * allocating instances of THE_CLASS.
- ************************************************************************
- * FUNCTION: new()
- * Aaron Stump, 6/8/99
- *
- * ABSTRACT: This allocator uses chunks for more efficient allocation.
- ************************************************************************
- * FUNCTION: delete()
- * Aaron Stump, 6/8/99
- *
- * ABSTRACT: This delete() puts the chunk pointed to by ptr on the
- * freelist.
- ************************************************************************
- * Chunking_Memory_Management_Initializer and its static instance are used
- * to call the static init_chunks() method for THE_CLASS.
- ************************************************************************/
-#define C_MACROS__ADD_CHUNKING_MEMORY_MANAGEMENT_CC(THE_CLASS,THE_FIELD,THE_CHUNK_SIZE) \
-unsigned THE_CLASS::C_MACROS__CHUNK_SIZE = THE_CHUNK_SIZE;\
-\
-unsigned THE_CLASS::C_MACROS__BLOCK_SIZE = sizeof(THE_CLASS);\
-\
-void * THE_CLASS::C_MACROS__freelist = NULL;\
-char * THE_CLASS::C_MACROS__next_free_block = NULL;\
-char * THE_CLASS::C_MACROS__end_of_current_chunk = NULL;\
-bool THE_CLASS::C_MACROS__initialized = false;\
-\
-void \
-THE_CLASS::C_MACROS__allocate_new_chunk() {\
-\
- unsigned tmp = C_MACROS__CHUNK_SIZE * C_MACROS__BLOCK_SIZE;\
- char *chunk = (char *)malloc(tmp);\
- \
- assert (chunk != NULL); \
-\
- C_MACROS__next_free_block = chunk;\
- C_MACROS__end_of_current_chunk = chunk + tmp;\
-}\
-\
-void * \
-THE_CLASS::operator new(size_t size, void *h) {\
- (void)size; /* size should always be _BLOCK_SIZE */\
-\
- if (h != NULL)\
- /* we're being told what memory we should use */\
- return h;\
-\
- char *new_block;\
-\
- if (C_MACROS__freelist) {\
- /* we have a block on the freelist that we can use */\
- new_block = (char *)C_MACROS__freelist; \
- C_MACROS__freelist = (void *)((THE_CLASS *)new_block)->THE_FIELD; \
- }\
- else {\
- /* we have to get a new block from a chunk (which we may */\
- /* have to allocate*/\
- \
- if (C_MACROS__next_free_block == C_MACROS__end_of_current_chunk)\
- C_MACROS__allocate_new_chunk();\
- \
- new_block = C_MACROS__next_free_block;\
- C_MACROS__next_free_block += C_MACROS__BLOCK_SIZE;\
- }\
- \
- return new_block;\
-}\
-\
-void \
-THE_CLASS::operator delete(void *ptr) {\
- void **f = (void **)&((THE_CLASS *)ptr)->THE_FIELD; \
- *f = C_MACROS__freelist; \
- C_MACROS__freelist = ptr; \
-}
-
-#endif
-
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback