qbolt/qbolt/boltdb.cpp

62 lines
1.3 KiB
C++

#include "boltdb.h"
BoltDB::BoltDB()
{
}
BoltDB* BoltDB::createFrom(QString filePath, QString &errorOut)
{
auto opts = ::Bolt_Options_New_Readonly();
QByteArray filePathBytes(filePath.toUtf8());
GoString filePathGS = Interop::toGoString_WeakRef(&filePathBytes);
auto open_ret = ::Bolt_Open(filePathGS, 0444, opts);
if (open_ret.r1.n != 0) {
errorOut = QString(open_ret.r1.p);
return nullptr;
}
BoltDB *ret = new BoltDB();
ret->gmsDbRef = open_ret.r0;
return ret;
}
template<typename T>
struct Wrapper {
T t;
};
static void byteArrayCallback(void* ctx, GoString text) {
auto fn = static_cast<Wrapper<NameReciever>*>(ctx);
fn->t(QByteArray::fromRawData(text.p, text.n));
}
bool BoltDB::listBucketsAtRoot(QString& errorOut, NameReciever cb)
{
auto containerVar = Wrapper<NameReciever>{cb};
GoString err = ::Bolt_ListBucketsAtRoot(
this->gmsDbRef,
(GoUintptr)(&containerVar),
byteArrayCallback // -fpermissive
);
if (err.n > 0) {
errorOut = QString(err.p);
return false;
}
return true;
}
BoltDB::~BoltDB()
{
GoString err = ::Bolt_Close(this->gmsDbRef);
if (err.n != 0) {
// Error closing database!
// Need to display an alert... somewhere
}
}