NativeCodeData.h 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. All rights reserved.
  3. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. //-------------------------------------------------------------------------------------------------------
  5. #pragma once
  6. #define NativeCodeDataNew(alloc, T, ...) AllocatorNew(NativeCodeData::Allocator, alloc, T, __VA_ARGS__)
  7. #define NativeCodeDataNewZ(alloc, T, ...) AllocatorNewZ(NativeCodeData::Allocator, alloc, T, __VA_ARGS__)
  8. #define NativeCodeDataNewArray(alloc, T, count) AllocatorNewArray(NativeCodeData::Allocator, alloc, T, count)
  9. #define NativeCodeDataNewArrayZ(alloc, T, count) AllocatorNewArrayZ(NativeCodeData::Allocator, alloc, T, count)
  10. struct CodeGenAllocators;
  11. class NativeCodeData
  12. {
  13. private:
  14. struct DataChunk
  15. {
  16. DataChunk * next;
  17. char data[0];
  18. };
  19. NativeCodeData(DataChunk * chunkList);
  20. DataChunk * chunkList;
  21. #ifdef PERF_COUNTERS
  22. size_t size;
  23. #endif
  24. static void DeleteChunkList(DataChunk * chunkList);
  25. public:
  26. class Allocator
  27. {
  28. public:
  29. static const bool FakeZeroLengthArray = false;
  30. Allocator();
  31. ~Allocator();
  32. char * Alloc(size_t requestedBytes);
  33. char * AllocZero(size_t requestedBytes);
  34. NativeCodeData * Finalize();
  35. void Free(void * buffer, size_t byteSize);
  36. #ifdef TRACK_ALLOC
  37. // Doesn't support tracking information, dummy implementation
  38. Allocator * TrackAllocInfo(TrackAllocData const& data) { return this; }
  39. void ClearTrackAllocInfo(TrackAllocData* data = NULL) {}
  40. #endif
  41. private:
  42. DataChunk * chunkList;
  43. #if DBG
  44. bool finalized;
  45. #endif
  46. #ifdef PERF_COUNTERS
  47. size_t size;
  48. #endif
  49. };
  50. ~NativeCodeData();
  51. };