62 lines
1.3 KiB
C++
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
|
|
}
|
|
}
|