#include <libsakura/sakura.h>
#include <casacore/casa/Logging/LogIO.h>
#include <casacore/casa/Logging/LogOrigin.h>
inline SakuraAlignedArray<T>::SakuraAlignedArray(size_t num_data) :
casacore::LogIO logger(casacore::LogOrigin("SakuraAlignedArray", "SakuraAlignedArray", WHERE));
logger << casacore::LogIO::DEBUGGING << "Constructing SakuraAlignedArray..." << casacore::LogIO::POST;
logger << casacore::LogIO::DEBUGGING << " Initial Address = " << storage_ << casacore::LogIO::POST;
logger << casacore::LogIO::DEBUGGING << " Aligned Address = " << data_ << casacore::LogIO::POST;
inline SakuraAlignedArray<T>::SakuraAlignedArray(casacore::Vector<T> const &in_vector) :
num_data_(in_vector.nelements()) {
casacore::LogIO logger(casacore::LogOrigin("SakuraAlignedArray", "SakuraAlignedArray", WHERE));
logger << casacore::LogIO::DEBUGGING << "Constructing SakuraAlignedArray..." << casacore::LogIO::POST;
for (size_t i = 0; i < num_data_; ++i) {
logger << casacore::LogIO::DEBUGGING << " Initial Address = " << storage_ << casacore::LogIO::POST;
logger << casacore::LogIO::DEBUGGING << " Aligned Address = " << data_ << casacore::LogIO::POST;
inline void SakuraAlignedArray<T>::initialize() {
size_t size_required = sizeof(T) * num_data_;
size_t size_of_arena = size_required + LIBSAKURA_SYMBOL(GetAlignment)() - 1;
storage_ = malloc(size_of_arena);
if (storage_ == nullptr) {
data_ = reinterpret_cast<T *>(LIBSAKURA_SYMBOL(AlignAny)(
size_of_arena, storage_, size_required));
assert(data_ != nullptr);
assert(LIBSAKURA_SYMBOL(IsAligned)(data_));