mirror of
https://github.com/zebrajr/node.git
synced 2026-01-15 12:15:26 +00:00
PR-URL: https://github.com/nodejs/node/pull/37067 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Tobias Nießen <tniessen@tnie.de> Reviewed-By: Michael Dawson <midawson@redhat.com> Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
46 lines
1.3 KiB
C++
46 lines
1.3 KiB
C++
#ifndef SRC_NODE_MEM_H_
|
|
#define SRC_NODE_MEM_H_
|
|
|
|
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
|
|
#include <cstddef>
|
|
|
|
namespace node {
|
|
namespace mem {
|
|
|
|
// nghttp2 allows custom allocators that
|
|
// follow exactly the same structure and behavior, but
|
|
// use different struct names. To allow for code re-use,
|
|
// the NgLibMemoryManager template class can be used for both.
|
|
|
|
struct NgLibMemoryManagerBase {
|
|
virtual void StopTrackingMemory(void* ptr) = 0;
|
|
};
|
|
|
|
template <typename Class, typename AllocatorStructName>
|
|
class NgLibMemoryManager : public NgLibMemoryManagerBase {
|
|
public:
|
|
// Class needs to provide these methods:
|
|
// void CheckAllocatedSize(size_t previous_size) const;
|
|
// void IncreaseAllocatedSize(size_t size);
|
|
// void DecreaseAllocatedSize(size_t size);
|
|
// Environment* env() const;
|
|
|
|
AllocatorStructName MakeAllocator();
|
|
|
|
void StopTrackingMemory(void* ptr) override;
|
|
|
|
private:
|
|
static void* ReallocImpl(void* ptr, size_t size, void* user_data);
|
|
static void* MallocImpl(size_t size, void* user_data);
|
|
static void FreeImpl(void* ptr, void* user_data);
|
|
static void* CallocImpl(size_t nmemb, size_t size, void* user_data);
|
|
};
|
|
|
|
} // namespace mem
|
|
} // namespace node
|
|
|
|
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
|
|
#endif // SRC_NODE_MEM_H_
|