diff options
Diffstat (limited to 'runtime/utils.h')
-rw-r--r-- | runtime/utils.h | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/runtime/utils.h b/runtime/utils.h index 7fb5bbd3da..50462b11b3 100644 --- a/runtime/utils.h +++ b/runtime/utils.h @@ -20,6 +20,7 @@ #include <pthread.h> #include <limits> +#include <memory> #include <string> #include <vector> @@ -502,6 +503,18 @@ void PushWord(std::vector<uint8_t>* buf, int32_t data); void EncodeUnsignedLeb128(uint32_t data, std::vector<uint8_t>* buf); void EncodeSignedLeb128(int32_t data, std::vector<uint8_t>* buf); +// Deleter using free() for use with std::unique_ptr<>. See also UniqueCPtr<> below. +struct FreeDelete { + // NOTE: Deleting a const object is valid but free() takes a non-const pointer. + void operator()(const void* ptr) const { + free(const_cast<void*>(ptr)); + } +}; + +// Alias for std::unique_ptr<> that uses the C function free() to delete objects. +template <typename T> +using UniqueCPtr = std::unique_ptr<T, FreeDelete>; + } // namespace art #endif // ART_RUNTIME_UTILS_H_ |