commit d5d7d0707b402ac6f281cbcc3a9087e5da8f1cd8
parent abf3f551ec16bcf1d66a95ed4a163f2818e3e415
Author: d.levin256@gmail.com <d.levin256@gmail.com>
Date: Tue, 26 Nov 2019 09:44:10 +0000
Aligned reallocate
Diffstat:
1 file changed, 31 insertions(+), 0 deletions(-)
diff --git a/include/kfr/base/memory.hpp b/include/kfr/base/memory.hpp
@@ -110,6 +110,37 @@ inline void aligned_free(void* ptr)
}
inline void aligned_release(void* ptr) { aligned_free(ptr); }
+
+inline void* aligned_reallocate(void* ptr, size_t new_size, size_t alignment)
+{
+ if (ptr)
+ {
+ if (new_size)
+ {
+ void* new_ptr = aligned_malloc(new_size, alignment);
+ size_t old_size = aligned_size(ptr);
+ memcpy(new_ptr, ptr, std::min(old_size, new_size));
+ aligned_release(ptr);
+ return new_ptr;
+ }
+ else
+ {
+ aligned_release(ptr);
+ return nullptr;
+ }
+ }
+ else
+ {
+ if (new_size)
+ {
+ return internal_generic::aligned_malloc(new_size, alignment);
+ }
+ else
+ {
+ return nullptr; // do nothing
+ }
+ }
+}
} // namespace internal_generic
/// @brief Allocates aligned memory