#ifndef _MEMORY_OPERATIONS_HPP_
#define _MEMORY_OPERATIONS_HPP_
#include <memory>
#include <exception>
#include <iostream>
#include <string>
#include <cstring>
namespace datasketches {
static inline void ensure_minimum_memory(size_t bytes_available, size_t min_needed) {
if (bytes_available < min_needed) {
throw std::out_of_range("Insufficient buffer size detected: bytes available "
+ std::to_string(bytes_available) + ", minimum needed " + std::to_string(min_needed));
}
}
static inline void check_memory_size(size_t requested_index, size_t capacity) {
if (requested_index > capacity) {
throw std::out_of_range("Attempt to access memory beyond limits: requested index "
+ std::to_string(requested_index) + ", capacity " + std::to_string(capacity));
}
}
static inline size_t copy_from_mem(const void* src, void* dst, size_t size) {
memcpy(dst, src, size);
return size;
}
static inline size_t copy_to_mem(const void* src, void* dst, size_t size) {
memcpy(dst, src, size);
return size;
}
template<typename T>
static inline size_t copy_from_mem(const void* src, T& item) {
memcpy(&item, src, sizeof(T));
return sizeof(T);
}
template<typename T>
static inline size_t copy_to_mem(T item, void* dst) {
memcpy(dst, &item, sizeof(T));
return sizeof(T);
}
}
#endif