スタックデータベース

固定長配列データベースができたなら、やはり、可変長配列データベースへと行きたいところですが、これはさすがに大変そうですね。その前に幾つか手順を踏む必要があります。

可変長配列データベースは固定長配列データベース上に実装することにします。一つの可変長データは複数の固定長データに分割して固定長配列に保存します。したがって、配列の添え字を気にせずに、固定長のデータを自由に出し入れできるデータベースが必要になります。

つまり、固定長データを挿入するとIDが返ってくるデータリポジトリといえるようなものを作ると可変長配列データベースが実装しやすくなります。そこで必要になるのが固定長データのブロックを管理する機能です。ブロックを管理するといっても削除されたブロックがどれかを管理すれば十分なので、削除されたブロックのIDをスタックに入れて管理することにします。

ということでスタックデータベース(こんな言葉は聞いたことないですが…)を作成しました。STLと同様の使い方になっていますので、使い方の説明は省略します。

template <class T> class Stack : public Array<T>  {
public:
  Stack(const std::string &f):Array<T>(f) {}
  Stack() {}

  void initialize(const std::string &f) {
    Array<T>::initialize(f);
  }

  void push(T &t) {
    set(Array<T>::getSize(), t);
  }
  T front() {
    if (Array<T>::getSize() <= 0) {
      throw Exception("No data");
    }
    return Array<T>::at(Array<T>::getSize() - 1);
  }
  void pop() {
    Array<T>::resize(Array<T>::getSize() - 1);
  }
};

前:固定長配列データベース

次:固定長配列データベースの改良