hxmm.h
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:7k
源码类别:

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: hxmm.h,v 1.3.36.3 2004/07/09 01:45:34 hubbe Exp $
  3.  * 
  4.  * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
  5.  * 
  6.  * The contents of this file, and the files included with this file,
  7.  * are subject to the current version of the RealNetworks Public
  8.  * Source License (the "RPSL") available at
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed
  10.  * the file under the current version of the RealNetworks Community
  11.  * Source License (the "RCSL") available at
  12.  * http://www.helixcommunity.org/content/rcsl, in which case the RCSL
  13.  * will apply. You may also obtain the license terms directly from
  14.  * RealNetworks.  You may not use this file except in compliance with
  15.  * the RPSL or, if you have a valid RCSL with RealNetworks applicable
  16.  * to this file, the RCSL.  Please see the applicable RPSL or RCSL for
  17.  * the rights, obligations and limitations governing use of the
  18.  * contents of the file.
  19.  * 
  20.  * Alternatively, the contents of this file may be used under the
  21.  * terms of the GNU General Public License Version 2 or later (the
  22.  * "GPL") in which case the provisions of the GPL are applicable
  23.  * instead of those above. If you wish to allow use of your version of
  24.  * this file only under the terms of the GPL, and not to allow others
  25.  * to use your version of this file under the terms of either the RPSL
  26.  * or RCSL, indicate your decision by deleting the provisions above
  27.  * and replace them with the notice and other provisions required by
  28.  * the GPL. If you do not delete the provisions above, a recipient may
  29.  * use your version of this file under the terms of any one of the
  30.  * RPSL, the RCSL or the GPL.
  31.  * 
  32.  * This file is part of the Helix DNA Technology. RealNetworks is the
  33.  * developer of the Original Code and owns the copyrights in the
  34.  * portions it created.
  35.  * 
  36.  * This file, and the files included with this file, is distributed
  37.  * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
  38.  * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
  39.  * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
  40.  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
  41.  * ENJOYMENT OR NON-INFRINGEMENT.
  42.  * 
  43.  * Technology Compatibility Kit Test Suite(s) Location:
  44.  *    http://www.helixcommunity.org/content/tck
  45.  * 
  46.  * Contributor(s):
  47.  * 
  48.  * ***** END LICENSE BLOCK ***** */
  49. #pragma once
  50. #ifndef _HXMM_
  51. #define _HXMM_
  52. #endif
  53. //#include "pn_macmemory.h"
  54. //#include "pnmm_c.h"
  55. #ifdef _CARBON
  56. #ifdef BUILDING_PNCRT
  57. #include <Carbon.h>
  58. #endif
  59. #ifndef _MAC_MACHO
  60. #include <size_t.h>
  61. #endif
  62. #else
  63. #ifndef size_t
  64. typedef unsigned long size_t;
  65. #endif
  66. #endif
  67. #include "hxtypes.h"
  68. #define kTempMemPoolHandle 'temp'
  69. #define kPoolSign   'POOL'
  70. #define kBlockSignature 'BLOK'
  71. extern Boolean _gInterruptCodeEnabled;
  72. extern  long g_InterruptsOn;
  73. #define USE_PNMM 1 // uncomment this line to enable PNMM code in Player
  74. typedef enum PNMM_MEMORYTYPE_TAG
  75. {
  76. PNMM_MEMORYTYPE_ALL=0,
  77. PNMM_MEMORYTYPE_EXTERNAL,
  78. PNMM_MEMORYTYPE_ALLPOOLS,
  79. PNMM_MEMORYTYPE_FREEPOOLS,
  80. PNMM_MEMORYTYPE_INTERRUPTPOOLS,
  81. PNMM_MEMORYTYPE_NONINTERRUPTPOOLS
  82. } PNMM_MEMORYTYPE;
  83. /*
  84. typedef struct MemPool {
  85. long signature; //  POOL SIGNATURE contains kPoolSign
  86. struct MemPool *next; // pointer to next pool
  87. struct MemPool *prev; //  previous memory pool.
  88. long left; // number of bytes left
  89. long leftlast; // number of bytes after last update.
  90. long locked; // is this block locked?
  91. long* lastfree;
  92. char* endofpool;
  93. // DEALLOCMEM* fpDeleteFunction; // the delete function associated with this pool.
  94. long interrupt_only; // the pool is locked out from non interrupt 
  95. // allocations.
  96. long allocatedblocks; //  Number of allocated blocks in this pool.
  97. long* record;
  98. size_t size; // number of bytes in pool (including header)
  99. char data[]; // variable size user data section
  100. //  time only.  
  101. } MemPool;
  102. */
  103. /*
  104. typedef struct PNMM_MEMORY_INFO
  105. {
  106. long numberOfPools; // Number of pools allocated
  107. MemPool* firstPool; // Ptr to first pool struct.
  108. long totalAllocated; // Total Memory allocated for all pools.
  109. long totalLeft; // Total memory free in all pools.
  110. long totalLocked; // Total Number of pools that are locked.
  111. long totalAllocated_Interrupt; // Total Memory allocated for interrupt time.
  112. long totalLeft_Interrupt; // Total Memory free in interrupt pools.
  113. //
  114. // To get the following information you must have "extendedinfo" set to true
  115. // when you call PNMM_INFO;
  116. //
  117. long totalblocks; // Total Number of blocks that are constructed in
  118. // all pools.
  119. long largestblock; // Largest Unused block, in any block, of any pool.
  120. } PNMM_MEMORY_INFO;
  121. */
  122. //
  123. // This is the block header, it is an enumerated structure.
  124. // Note that the ExternalPtr and PoolPtr, both use the same 4 bytes.
  125. //
  126. #define kBlockHeaderSize 16
  127. enum 
  128. {
  129. kBlockHeader_Signature = 0,
  130. kBlockHeader_DeleteFunction,
  131. kBlockHeader_ExtraSize=kBlockHeader_DeleteFunction,
  132. kBlockHeader_PoolPtr,
  133. kBlockHeader_ExternalPtr=kBlockHeader_PoolPtr,
  134. kBlockHeader_BlockSize
  135. };
  136. //
  137. //
  138. // This is a structure used for keeping track of pools.
  139. // This allows us to make the best choice possible when using Virtual Memory,
  140. // allowing us to not cause page faults when we don't have to.
  141. //
  142. //
  143. /*
  144. typedef struct tag_PoolRecord
  145. {
  146. MemPool* pool;
  147. long poolleft;
  148. long poolend;
  149. long pool_interrupt;
  150. } PNMM_POOLRECORD;
  151. */
  152. typedef void (LOWMEMORYNOTIFIER)(void);
  153. #ifdef __cplusplus
  154. extern "C" {
  155. #endif
  156. /*
  157. //
  158. // Override function.
  159. //
  160. Boolean PNMM_OVERRIDE_ALLOC(ALLOCMEM* pNew, DEALLOCMEM* pDelete);
  161. */
  162. //
  163. // Block allocation functions
  164. //
  165. Boolean PNMM_NEWBLOCK(size_t newsize, Boolean interrupt_only);
  166. //
  167. // Clean up function. 
  168. //
  169. void PNMM_FORCECLEANUP(PNMM_MEMORYTYPE MemType);
  170. //
  171. // Getting information about the state of the memory allocator.
  172. //
  173. void HXMM_COMPACT(void);
  174. //PNMM_MEMORY_INFO* PNMM_INFO(Boolean extendedinfo);
  175. //BOOL HXMM_ATINTERRUPT(void);
  176. BOOL HXMM_ATINTERRUPT(void);
  177. //
  178. // State information to give us an idea of what kind of memory to be using.
  179. //
  180. void HXMM_INTERRUPTON(void);
  181. void HXMM_INTERRUPTOFF(void);
  182. //
  183. // Tells memory allocator to mark the memory as being held.
  184. // In so doing when the program is in virtual memory mode, it marks
  185. // blocks of memory as being held.  This makes access at interrupt time,
  186. // completely safe when in virtual memory mode.
  187. //
  188. void PNMM_HOLDMEMORY_ON(void);
  189. void PNMM_HOLDMEMORY_OFF(void);
  190. BOOL HXMM_VIRTUAL_MEMORY_ON(void);
  191. //
  192. // Allows the user to set a bare minimum which must be left in the application's heap.
  193. //
  194. void PNMM_SETAPPLICATIONMINIMUM(size_t size);
  195. //
  196. // Debugging use only.
  197. //
  198. void HXMM_POOLCHECK(void);
  199. void PNMM_OUTPUTMEMSTATS(void);
  200. void  PNMM_ASSERTPTR(void* ptr);
  201. void PNMM_DUMP_ALLOCATED_BLOCKS(void);
  202. //
  203. // FEATURE CHECKING
  204. //
  205. ULONG32   PNMM_VERSION(void);
  206. //
  207. // Low-memory notification
  208. //
  209. BOOL PNMM_LOWMEMORY(void);
  210. void PNMM_REGISTER_NOTIFICATION_FUNCTION(LOWMEMORYNOTIFIER* theNotifier);
  211. void PNMM_UNREGISTER_NOTIFICATION_FUNCTION(LOWMEMORYNOTIFIER* theNotifier);
  212. //
  213. // INTERNAL USE ONLY
  214. //
  215. void  PNMM_INIT(void);
  216. void  PNMM_SHUTDOWN(void);
  217. #ifdef __cplusplus
  218. }
  219. #endif