#include <libsakura/sakura.h>
#include <casacore/casa/Logging/LogIO.h>
#include <casacore/casa/Logging/LogOrigin.h>
#include <casa_sakura/SakuraUtils.h>
#include <casa_sakura/SakuraAlignedArray.h>
using namespace casacore;
Bool SakuraUtils::is_initialized_ = false;
Bool SakuraUtils::InitializeSakura() {
LogIO logger(LogOrigin("SakuraUtils", "InitializeSakura", WHERE));
logger << LogIO::DEBUGGING << "Initializing Sakura...";
LIBSAKURA_SYMBOL(Status) status = LIBSAKURA_SYMBOL(Initialize)(NULL, NULL);
if (status == LIBSAKURA_SYMBOL(Status_kOK)) {
logger << LogIO::DEBUGGING << "SUCCESS!" << LogIO::POST;
logger << LogIO::DEBUGGING << "FAILED!" << LogIO::POST;
void SakuraUtils::CleanUpSakura() {
LogIO logger(LogOrigin("SakuraUtils", "CleanUpSakura", WHERE));
logger << LogIO::DEBUGGING << "Cleaning up Sakura..." << LogIO::POST;
LIBSAKURA_SYMBOL(CleanUp)();
Bool SakuraUtils::IsSakuraInitialized() {
LogIO logger(LogOrigin("SakuraUtils", "IsSakuraInitialized", WHERE));
logger << LogIO::DEBUGGING << "sakura is "
<< ((is_initialized_) ? "" : "not ") << "initialized." << LogIO::POST;
int SakuraDriver::num_instances_ = 0;
SakuraDriver::SakuraDriver() {
if (num_instances_ == 0 || !(SakuraUtils::IsSakuraInitialized())) {
std::cerr << "Initialize Sakura: num_instances_ = " << num_instances_ << endl;
SakuraUtils::InitializeSakura();