IceMemoryMacros.h 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  2. /**
  3. * Contains all memory macros.
  4. * \file IceMemoryMacros.h
  5. * \author Pierre Terdiman
  6. * \date April, 4, 2000
  7. */
  8. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  9. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  10. // Include Guard
  11. #ifndef __ICEMEMORYMACROS_H__
  12. #define __ICEMEMORYMACROS_H__
  13. #undef ZeroMemory
  14. #undef CopyMemory
  15. #undef MoveMemory
  16. #undef FillMemory
  17. //! Clears a buffer.
  18. //! \param addr [in] buffer address
  19. //! \param size [in] buffer length
  20. //! \see FillMemory
  21. //! \see StoreDwords
  22. //! \see CopyMemory
  23. //! \see MoveMemory
  24. inline_ void ZeroMemory(void* addr, udword size) { memset(addr, 0, size); }
  25. //! Fills a buffer with a given byte.
  26. //! \param addr [in] buffer address
  27. //! \param size [in] buffer length
  28. //! \param val [in] the byte value
  29. //! \see StoreDwords
  30. //! \see ZeroMemory
  31. //! \see CopyMemory
  32. //! \see MoveMemory
  33. inline_ void FillMemory(void* dest, udword size, ubyte val) { memset(dest, val, size); }
  34. //! Fills a buffer with a given dword.
  35. //! \param addr [in] buffer address
  36. //! \param nb [in] number of dwords to write
  37. //! \param value [in] the dword value
  38. //! \see FillMemory
  39. //! \see ZeroMemory
  40. //! \see CopyMemory
  41. //! \see MoveMemory
  42. //! \warning writes nb*4 bytes !
  43. inline_ void StoreDwords(udword* dest, udword nb, udword value)
  44. {
  45. while(nb--) *dest++ = value;
  46. }
  47. //! Copies a buffer.
  48. //! \param addr [in] destination buffer address
  49. //! \param addr [in] source buffer address
  50. //! \param size [in] buffer length
  51. //! \see ZeroMemory
  52. //! \see FillMemory
  53. //! \see StoreDwords
  54. //! \see MoveMemory
  55. inline_ void CopyMemory(void* dest, const void* src, udword size) { memcpy(dest, src, size); }
  56. //! Moves a buffer.
  57. //! \param addr [in] destination buffer address
  58. //! \param addr [in] source buffer address
  59. //! \param size [in] buffer length
  60. //! \see ZeroMemory
  61. //! \see FillMemory
  62. //! \see StoreDwords
  63. //! \see CopyMemory
  64. inline_ void MoveMemory(void* dest, const void* src, udword size) { memmove(dest, src, size); }
  65. #define SIZEOFOBJECT sizeof(*this) //!< Gives the size of current object. Avoid some mistakes (e.g. "sizeof(this)").
  66. //#define CLEAROBJECT { memset(this, 0, SIZEOFOBJECT); } //!< Clears current object. Laziness is my business. HANDLE WITH CARE.
  67. #define DELETESINGLE(x) if (x) { delete x; x = null; } //!< Deletes an instance of a class.
  68. #define DELETEARRAY(x) if (x) { delete []x; x = null; } //!< Deletes an array.
  69. #define SAFE_RELEASE(x) if (x) { (x)->Release(); (x) = null; } //!< Safe D3D-style release
  70. #define SAFE_DESTRUCT(x) if (x) { (x)->SelfDestruct(); (x) = null; } //!< Safe ICE-style release
  71. #ifdef __ICEERROR_H__
  72. #define CHECKALLOC(x) if(!x) return SetIceError("Out of memory.", EC_OUT_OF_MEMORY); //!< Standard alloc checking. HANDLE WITH CARE.
  73. #else
  74. #define CHECKALLOC(x) if(!x) return false;
  75. #endif
  76. #endif // __ICEMEMORYMACROS_H__