|  |  | 赤紫蘇２．リファレンス
|  | 単純型
| akaxiso2.0-beta1 |
| 目次 はじめに 1. 概要 2. ライブラリAPI 3.単純型 4. 組み込み型 5. 配列 6. ポインタ 7. データモデル 8. aka:sequence 8.1 メンバ定義(単純型) 8.2 メンバ定義(複雑型) 8.3 出現頻度定義 9. aka:all 10 aka:choice 10.1 要素の定義 10.2 固定値の定義 10.3 mocクラス 10.4 itemの扱い 11 aka:simplecontent 12 属性 13 XML Schema機能対応表 |  | 単純型 単純型に対する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()メソッドを用いて、単純型のテキストへの書き出し、テキストの読み込みを実装します。赤紫蘇２の組み込み型については、あらかじめleafクラスの実装が提供されています。3. 組み込み型をご参照ください。 read_text()メソッドの第一引数は、void*で渡される値クラスインスタンスへのポインタです。これを、V型にキャストし、istmで渡される文字列を用いて、設定します。 また、write_text()メソッドの第一引数は、void *で渡される値クラスインスタンスへのポインタです。これも同様に、V型にキャストし、ostmで渡される出力ストリームにテキストとして書き出します。 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プロジェクトページへ