new.cpp
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:2k
源码类别:

Symbian

开发平台:

C/C++

  1. /*============================================================================*
  2.  *
  3.  * (c) 1995-2002 RealNetworks, Inc. Patents pending. All rights reserved.
  4.  *
  5.  *============================================================================*/
  6.  
  7. // We can only overload new/malloc on the platform; dll stuff on emulator prevents this.
  8. #ifdef __MARM__
  9. #include <e32base.h>
  10. #include <estlib.h>
  11. #include <string.h>
  12. void* operator new(size_t size)
  13. {
  14.     /* based on Symbian document, passing 
  15.        size > KMaxTInt/2 causes the Alloc function
  16.        to throw USER 47 exception.  In order to avoid
  17.        the exception such that the player will gracefully 
  18.        shutdown with out of memory condition,  the following 
  19.        check is added.*/
  20.     if( size > (KMaxTInt/2) )
  21.         User::Leave(KErrNoMemory);
  22.     void *p = User::Alloc(size);    
  23.     if (p)
  24. memset(p, 0, size);
  25.     else // allocation failure
  26. User::Leave(KErrNoMemory);
  27.     return p;
  28. }
  29. void* operator new[](size_t size)
  30. {
  31.     if( size > (KMaxTInt/2) )
  32.         User::Leave(KErrNoMemory);
  33.     void *p = User::Alloc(size);
  34.     if (p)
  35. memset(p, 0, size);
  36.     else // allocation failure
  37. User::Leave(KErrNoMemory);
  38.     return p;
  39. }
  40. void operator delete(void* p)
  41. {
  42.     if (p)
  43. User::Free(p);
  44. }
  45. void operator delete[](void* p)
  46. {
  47.     if (p)
  48. User::Free(p);
  49. }
  50. extern "C"
  51. {
  52.     void* malloc(size_t size);
  53.     void* realloc(void* pOld, size_t size);
  54.     void free(void* p);
  55. }
  56. void* malloc(size_t size)
  57. {
  58.     if( size > (KMaxTInt/2) )
  59.         User::Leave(KErrNoMemory);
  60.     void *p = User::Alloc(size);
  61.     if (p == 0) // allocation failure
  62. User::Leave(KErrNoMemory);
  63.     return p;
  64. }
  65. void* realloc(void* pOld, size_t size)
  66. {
  67.     void* p = User::ReAlloc(pOld, size);
  68.     if (p == 0) // allocation failure
  69. User::Leave(KErrNoMemory);
  70.     return p;
  71. }
  72. void free(void* p)
  73. {
  74.     if (p)
  75. User::Free(p);
  76. }
  77. #endif // __MARM__