赤紫蘇2.リファレンス

単純型

akaxiso2.0-beta1


単純型

単純型に対するleafクラスは、aka::simpletype<>クラスを用いて定義します。

template<class V, class L=xiso::leaf<V> > 
struct simpletype {
  static void read_text(void *elm, aka2::isstream &istm, const preconditions &pfs);
  static void write_text(const void *elm, std::ostream &ostm, const preconditions &pfs);
};

ユーザは、read_text()、write_text()メソッドを用いて、単純型のテキストへの書き出し、テキストの読み込みを実装します。

赤紫蘇2の組み込み型については、あらかじめleafクラスの実装が提供されています。3. 組み込み型をご参照ください。

read_text()メソッドの第一引数は、void*で渡される値クラスのインスタンスへのポインタです。これを、V型にキャストして用います。istmには、読み込むべき文字列が設定されています。

また、write_text()メソッドの第一引数は、void *で渡される値クラスインスタンスへのポインタです。これも同様に、V型にキャストし、ostmで渡される出力ストリームにテキストとして書き出します。

aka::preconditionクラスは、単純型のテキストの読み込み、テキストへの書き出しを行う際の前提条件を提供します。現在のところ、名前空間とそのプレフィックスの対応のみが参照可能です。通常は使用する必要がありません。必要に応じ、今後、拡張される予定です。

値の読み込み、書き出しに失敗した場合には、例外として、aka::error()クラスをthrowしてください。

簡単な例として、long型のleafクラスの定義を以下にしめします。

namespace xiso { 
  template<>
  struct leaf<long> : aka::simpletype<long> {
    static void read_text(void *elm, aka2::isstream &istm, const preconditions &pfs) {
      V &v = *static_cast<V*>(elm);
      istm >> v;
      if (istm.fail())
        throw aka::error("Failed to parse long value.", __FILE__, __LINE__);
    }

    static void write_text(const void *elm, std::ostream &ostm, const preconditions &pfs) {
      const V &v = *static_cast<const V*>(elm);
      ostm << v;
   }
};

read_text()、write_text()内部の実装により、値の範囲チェックや形式チェックなどを行い、妥当性検証を行います。


リファレンストップに戻る 赤紫蘇ホームページへ sourceforgeプロジェクトページへ