RecastAlloc.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. //
  2. // Copyright (c) 2009-2010 Mikko Mononen memon@inside.org
  3. //
  4. // This software is provided 'as-is', without any express or implied
  5. // warranty. In no event will the authors be held liable for any damages
  6. // arising from the use of this software.
  7. // Permission is granted to anyone to use this software for any purpose,
  8. // including commercial applications, and to alter it and redistribute it
  9. // freely, subject to the following restrictions:
  10. // 1. The origin of this software must not be misrepresented; you must not
  11. // claim that you wrote the original software. If you use this software
  12. // in a product, an acknowledgment in the product documentation would be
  13. // appreciated but is not required.
  14. // 2. Altered source versions must be plainly marked as such, and must not be
  15. // misrepresented as being the original software.
  16. // 3. This notice may not be removed or altered from any source distribution.
  17. //
  18. #include <stdlib.h>
  19. #include <string.h>
  20. #include "RecastAlloc.h"
  21. #include "RecastAssert.h"
  22. static void *rcAllocDefault(size_t size, rcAllocHint)
  23. {
  24. return malloc(size);
  25. }
  26. static void rcFreeDefault(void *ptr)
  27. {
  28. free(ptr);
  29. }
  30. static rcAllocFunc* sRecastAllocFunc = rcAllocDefault;
  31. static rcFreeFunc* sRecastFreeFunc = rcFreeDefault;
  32. /// @see rcAlloc, rcFree
  33. void rcAllocSetCustom(rcAllocFunc *allocFunc, rcFreeFunc *freeFunc)
  34. {
  35. sRecastAllocFunc = allocFunc ? allocFunc : rcAllocDefault;
  36. sRecastFreeFunc = freeFunc ? freeFunc : rcFreeDefault;
  37. }
  38. /// @see rcAllocSetCustom
  39. void* rcAlloc(size_t size, rcAllocHint hint)
  40. {
  41. return sRecastAllocFunc(size, hint);
  42. }
  43. /// @par
  44. ///
  45. /// @warning This function leaves the value of @p ptr unchanged. So it still
  46. /// points to the same (now invalid) location, and not to null.
  47. ///
  48. /// @see rcAllocSetCustom
  49. void rcFree(void* ptr)
  50. {
  51. if (ptr)
  52. sRecastFreeFunc(ptr);
  53. }