見出し画像

Notes C API探訪: DBID取得

DBIDというと聞きなじみがないかもしれませんが、型はTIMEDATE型で、正体はデータベースの作成日です。DBIDはNSFDbIDGet関数で取得できます。

// #include <nsfdata.h>
#define DBID TIMEDATE

// #include <nsfdb.h>
STATUS LNPUBLIC NSFDbIDGet (DBHANDLE hDB, DBID far *retDbID);

これをnxpp::Databaseクラスに組み込むと、次のようになります。

#ifndef NXPP_DATABASE_HPP
#define NXPP_DATABASE_HPP

#include "./nxpp_pathnet.hpp"
#include "./nxpp_dbinfo.hpp"
#include <iostream>

#ifdef NT
#pragma pack(push, 1)
#endif

#include <global.h>
#include <nsfdb.h>

#ifdef NT
#pragma pack(pop)
#endif

namespace nxpp {

class Database;
using DatabasePtr = std::shared_ptr<Database>;
using Db = Database;
using DbPtr = DatabasePtr;

/**
* @brief データベース/ディレクトリクラス
*/
class Database
{
// ...
  DBID getID() const {
   return Database::getID(handle_);
  }

  static DBID getID(DBHANDLE hDB) {
   DBID dbid;
   Status status = NSFDbIDGet(hDB, &dbid);
   if (!status) { throw status; }
   return dbid;
  }

};

} // namespace nxpp

#endif // NXPP_DATABASE_HPP

ここまで来て、TIMEDATE型のラップクラスの必要性が出てきました。次回から、TIMEDATEにのラッピングに挑戦します。

この記事が気に入ったらサポートをしてみませんか?