VirtualBox

source: vbox/trunk/include/iprt/heap.h@ 3810

Last change on this file since 3810 was 3630, checked in by vboxsync, 17 years ago

iprt_hdr_h -> _iprt_hdr_h

File size: 6.1 KB
Line 
1/** @file
2 * innotek Portable Runtime - A Simple Heap.
3 */
4
5/*
6 * Copyright (C) 2006-2007 innotek GmbH
7 *
8 * This file is part of VirtualBox Open Source Edition (OSE), as
9 * available from http://www.virtualbox.org. This file is free software;
10 * you can redistribute it and/or modify it under the terms of the GNU
11 * General Public License as published by the Free Software Foundation,
12 * in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
13 * distribution. VirtualBox OSE is distributed in the hope that it will
14 * be useful, but WITHOUT ANY WARRANTY of any kind.
15 *
16 * If you received this file as part of a commercial VirtualBox
17 * distribution, then only the terms of your commercial VirtualBox
18 * license agreement apply instead of the previous paragraph.
19 */
20
21#ifndef ___iprt_heap_h
22#define ___iprt_heap_h
23
24#include <iprt/cdefs.h>
25#include <iprt/types.h>
26
27__BEGIN_DECLS
28
29/**
30 * Initializes the heap.
31 *
32 * @returns IPRT status code on success.
33 * @param pHeap Where to store the heap anchor block on success.
34 * @param pvMemory Pointer to the heap memory.
35 * @param cbMemory The size of the heap memory.
36 */
37RTDECL(int) RTHeapSimpleInit(PRTHEAPSIMPLE pHeap, void *pvMemory, size_t cbMemory);
38
39/**
40 * Merge two simple heaps into one.
41 *
42 * The requiremet is of course that they next two each other memory wise.
43 *
44 * @returns IPRT status code on success.
45 * @param pHeap Where to store the handle to the merged heap on success.
46 * @param Heap1 Handle to the first heap.
47 * @param Heap2 Handle to the second heap.
48 * @remark This API isn't implemented yet.
49 */
50RTDECL(int) RTHeapSimpleMerge(PRTHEAPSIMPLE pHeap, RTHEAPSIMPLE Heap1, RTHEAPSIMPLE Heap2);
51
52/**
53 * Allocates memory from the specified simple heap.
54 *
55 * @returns Pointer to the allocated memory block on success.
56 * @returns NULL if the request cannot be satisfied. (A VERR_NO_MEMORY condition.)
57 *
58 * @param Heap The heap to allocate the memory on.
59 * @param cb The requested heap block size.
60 * @param cbAlignment The requested heap block alignment. Pass 0 for default alignment.
61 * Must be a power of 2.
62 */
63RTDECL(void *) RTHeapSimpleAlloc(RTHEAPSIMPLE Heap, size_t cb, size_t cbAlignment);
64
65/**
66 * Allocates zeroed memory from the specified simple heap.
67 *
68 * @returns Pointer to the allocated memory block on success.
69 * @returns NULL if the request cannot be satisfied. (A VERR_NO_MEMORY condition.)
70 *
71 * @param Heap The heap to allocate the memory on.
72 * @param cb The requested heap block size.
73 * @param cbAlignment The requested heap block alignment. Pass 0 for default alignment.
74 * Must be a power of 2.
75 */
76RTDECL(void *) RTHeapSimpleAllocZ(RTHEAPSIMPLE Heap, size_t cb, size_t cbAlignment);
77
78/**
79 * Reallocates / Allocates / Frees a heap block.
80 *
81 * @param Heap The heap. This is optional and will only be used for strict assertions.
82 * @param pv The heap block returned by RTHeapSimple. If NULL it behaves like RTHeapSimpleAlloc().
83 * @param cbNew The new size of the heap block. If NULL it behaves like RTHeapSimpleFree().
84 * @param cbAlignment The requested heap block alignment. Pass 0 for default alignment.
85 * Must be a power of 2.
86 * @remark This API isn't implemented yet.
87 */
88RTDECL(void *) RTHeapSimpleRealloc(RTHEAPSIMPLE Heap, void *pv, size_t cbNew, size_t cbAlignment);
89
90/**
91 * Reallocates / Allocates / Frees a heap block, zeroing any new bits.
92 *
93 * @param Heap The heap. This is optional and will only be used for strict assertions.
94 * @param pv The heap block returned by RTHeapSimple. If NULL it behaves like RTHeapSimpleAllocZ().
95 * @param cbNew The new size of the heap block. If NULL it behaves like RTHeapSimpleFree().
96 * @param cbAlignment The requested heap block alignment. Pass 0 for default alignment.
97 * Must be a power of 2.
98 * @remark This API isn't implemented yet.
99 */
100RTDECL(void *) RTHeapSimpleReallocZ(RTHEAPSIMPLE Heap, void *pv, size_t cbNew, size_t cbAlignment);
101
102/**
103 * Frees memory allocated from a simple heap.
104 *
105 * @param Heap The heap. This is optional and will only be used for strict assertions.
106 * @param pv The heap block returned by RTHeapSimple
107 */
108RTDECL(void) RTHeapSimpleFree(RTHEAPSIMPLE Heap, void *pv);
109
110/**
111 * Gets the size of the specified heap block.
112 *
113 * @returns The actual size of the heap block.
114 * @returns 0 if \a pv is NULL or it doesn't point to a valid heap block. An invalid \a pv
115 * can also cause traps or trigger assertions.
116 * @param Heap The heap. This is optional and will only be used for strict assertions.
117 * @param pv The heap block returned by RTHeapSimple
118 */
119RTDECL(size_t) RTHeapSimpleSize(RTHEAPSIMPLE Heap, void *pv);
120
121/**
122 * Gets the size of the heap.
123 *
124 * This size includes all the internal heap structures. So, even if the heap is
125 * empty the RTHeapSimpleGetFreeSize() will never reach the heap size returned
126 * by this function.
127 *
128 * @returns The heap size.
129 * @returns 0 if heap was safely detected as being bad.
130 * @param Heap The heap.
131 */
132RTDECL(size_t) RTHeapSimpleGetHeapSize(RTHEAPSIMPLE Heap);
133
134/**
135 * Returns the sum of all free heap blocks.
136 *
137 * This is the amount of memory you can theoretically allocate
138 * if you do allocations exactly matching the free blocks.
139 *
140 * @returns The size of the free blocks.
141 * @returns 0 if heap was safely detected as being bad.
142 * @param Heap The heap.
143 */
144RTDECL(size_t) RTHeapSimpleGetFreeSize(RTHEAPSIMPLE Heap);
145
146/**
147 * Printf like callbaclk function for RTHeapSimpleDump.
148 * @param pszFormat IPRT format string.
149 * @param ... Format arguments.
150 */
151typedef DECLCALLBACK(void) FNRTHEAPSIMPLEPRINTF(const char *pszFormat, ...);
152/** Pointer to a FNRTHEAPSIMPLEPRINTF function. */
153typedef FNRTHEAPSIMPLEPRINTF *PFNRTHEAPSIMPLEPRINTF;
154
155/**
156 * Dumps the hypervisor heap.
157 *
158 * @param Heap The heap handle.
159 * @param pfnPrintf Printf like function that groks IPRT formatting.
160 */
161RTDECL(void) RTHeapSimpleDump(RTHEAPSIMPLE Heap, PFNRTHEAPSIMPLEPRINTF pfnPrintf);
162
163__END_DECLS
164
165#endif
166
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette