|  |  | 赤紫蘇２．リファレンス
|  | 配列
| 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機能対応表 |  | 配列クラスは、STLコンテナを用いて定義します。 STLコンテナ以外のコンテナであっても、も、クラスインターフェースとして、STLコンテナと同等のメソッドを実装していれば、使用することができます。 以下の二種類のコンテナを扱うことができます。 ・順序つきコンテナ(sequential container) std::list<>、std::vector<>などのように、push_back()メソッドを持ち、push_back()メソッドで挿入された要素が、挿入順に並ぶコンテナです。 順序つきコンテナでは、push_back()メソッド、clear()メソッド、size()、begin()メソッド、end()メソッドを実装しており、iterator型とconst_iterator型に加え、value_type型が使用できる必要があります。以下に、順序つきコンテナとして赤紫蘇が必要とするインターフェースを示します。
    template<class I>
    struct sequential  {
      typedef I value_type;
      struct iterator (implementation defined.);
      struct const_iterator (implementation defined);

      iterator begin();
      iterator end();

      const_iterator begin() const;
      const_iterator end() const;

      void clear();
      bool empty() const;
      size_t size() const;
      void push_back(const I& i);
    };
・連想コンテナ(associative container) std::map<>、std::set<>のように、指定されたキーによりコンテナ内の順序付けが可能なコンテナです。 値方として、std::pair<key_type, value_type> が使用でき、insert()メソッド、clear()メソッド、size()メソッド、begin()メソッド、end()メソッドを実装しており、iterator型とconst_iterator型に加え、value_type型が使用できる必要があります。
    template<class I>
    struct associative  {
      typedef (container defined) value_type;
      struct iterator (implementation defined.);
      struct const_iterator (implementation defined);

      iterator begin();
      iterator end();

      const_iterator begin() const;
      const_iterator end() const;

      void clear();
      bool empty() const;
      size_t size() const;
      std::pair<value_type, bool> insert(const I& i);
    };
現在、sorted associative containerのみに対応しています。若干の実装の追加で、multiple associative containerに対応することも、可能です。 配列の定義 通常の(STL)コンテナの使用法と同様です。 たとえば、long型の配列をstd::vector<>で表現する場合、 typedef std::vector<long> long_array; と定義することで、long型の配列を定義することができます。 leafクラスの定義 配列に対するleafクラスを定義する場合のテンプレートが、赤紫蘇２には、準備されています。 順序つきコンテナのleafクラスを定義する場合には、aka::sequential_array<>テンプレートを使います。宣言は以下の通りです。
    template<class T, class VL=xiso::leaf<typename T::value_type> >
    class sequential_array;
Tは、コンテナクラス名、VLは、要素の値を処理するleafクラスを指定します。VLは、デフォルト値として、xiso::leaf<typename T::value_type>を持ちます。明示的にコンテナ要素のleafクラスを指定する時には、VLに、leafクラス名を与えてください。 上記のlong_arrayに対応するleafクラスの定義は、以下のようになります。
    namespace xiso {
      template<>
      struct leaf<long_array> : aka::sequential_array<long_array> { };
    }
また、xiso::leaf<>を用いず、leafクラス名を指定する場合には、以下の通りです。
    typedef aka::sequential_array<long_array> long_array_leaf;
連想コンテナの場合には、aka::associative_array<>テンプレートを使用します。使用法は、aka::sequential_array<>テンプレートと同様です。
    template<class T, class VL=xiso::leaf<TYPENAME T::value_type> >
    class associative_array;

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