summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'base/gsmalloc.h')
-rw-r--r--base/gsmalloc.h71
1 files changed, 71 insertions, 0 deletions
diff --git a/base/gsmalloc.h b/base/gsmalloc.h
new file mode 100644
index 00000000..1f2f5b2b
--- /dev/null
+++ b/base/gsmalloc.h
@@ -0,0 +1,71 @@
+/* Copyright (C) 2001-2019 Artifex Software, Inc.
+ All Rights Reserved.
+
+ This software is provided AS-IS with no warranty, either express or
+ implied.
+
+ This software is distributed under license and may not be copied,
+ modified or distributed except as expressly authorized under the terms
+ of the license contained in the file LICENSE in this distribution.
+
+ Refer to licensing information at http://www.artifex.com or contact
+ Artifex Software, Inc., 1305 Grant Avenue - Suite 200, Novato,
+ CA 94945, U.S.A., +1(415)492-9861, for further information.
+*/
+
+
+/* Client interface to default (C heap) allocator */
+/* Requires gsmemory.h */
+
+#ifndef gsmalloc_INCLUDED
+# define gsmalloc_INCLUDED
+
+#include "gxsync.h"
+
+/* Define a memory manager that allocates directly from the C heap. */
+typedef struct gs_malloc_block_s gs_malloc_block_t;
+typedef struct gs_malloc_memory_s {
+ gs_memory_common;
+ gs_malloc_block_t *allocated;
+ size_t limit;
+ size_t used;
+ size_t max_used;
+ gx_monitor_t *monitor; /* monitor to serialize access to functions */
+} gs_malloc_memory_t;
+
+/* Allocate and initialize a malloc memory manager. */
+gs_malloc_memory_t *gs_malloc_memory_init(void);
+
+/* Release all the allocated blocks, and free the memory manager. */
+/* The cast is unfortunate, but unavoidable. */
+#define gs_malloc_memory_release(mem)\
+ gs_memory_free_all((gs_memory_t *)mem, FREE_ALL_EVERYTHING,\
+ "gs_malloc_memory_release")
+
+/* Get a basic malloc based allocator, built on a new
+ * gs_lib_ctx instance. */
+gs_memory_t * gs_malloc_init(void);
+/* Get a basic malloc based allocator, built on a
+ * gs_lib_ctx instance, cloned from this supplied one.
+ * If ctx == NULL, this behaves as gs_malloc_init.
+ */
+gs_memory_t * gs_malloc_init_with_context(gs_lib_ctx_t *ctx);
+void gs_malloc_release(gs_memory_t *mem);
+
+#define gs_malloc(mem, nelts, esize, cname)\
+ (void *)gs_alloc_byte_array(mem->non_gc_memory, nelts, esize, cname)
+#define gs_free(mem, data, nelts, esize, cname)\
+ gs_free_object(mem->non_gc_memory, data, cname)
+
+/* ---------------- Locking ---------------- */
+
+/* Create a locked wrapper for a heap allocator. */
+int gs_malloc_wrap(gs_memory_t **wrapped, gs_malloc_memory_t *contents);
+
+/* Get the wrapped contents. */
+gs_malloc_memory_t *gs_malloc_wrapped_contents(gs_memory_t *wrapped);
+
+/* Free the wrapper, and return the wrapped contents. */
+gs_malloc_memory_t *gs_malloc_unwrap(gs_memory_t *wrapped);
+
+#endif /* gsmalloc_INCLUDED */