赤紫蘇2 リファレンス

配列とポインタ型

akaxiso2.0-beta3


赤紫蘇2リファレンス

1.概要
1.1 赤紫蘇2の構成
1.2 プログラムの
開始から終了まで
1.3 文字コードと
文字コード変換エンジン
1.4 名前空間とQName
1.5 マルチスレッディング

2. 赤紫蘇2データモデル
2.1 チュートリアル
2.2 パーティクル
2.3 aka:sequence
2.3.1 単純型の子要素
2.3.2 複合型の子要素
2.3.1 配列型
2.4 aka::all
2.5 aka:choice
2.5.1 複雑型の子要素
2.5.2 単純型の子要素
2.5.3 バインダクラス
2.5.4 子要素オブジェクト
(aka::item)の扱い
2.5.5 子要素の出現頻度
2.6 属性
2.7 aka:simpleContent
2.8 単純型(aka:simleType)
2.8.1

組み込み型

2.9

配列とポインタ

2.,10 ワイルドカード

3 XMLによる永続化
3.1 シリアライズ
3.2 デシリアライズ

付表
A ライブラリ主要API
B XML Schemaとの
機能対応表
C リリースノート

配列クラスは、STLコンテナを用いて定義します。

STLコンテナ以外のコンテナであっても、クラスインターフェースとして、STLコンテナと同等のメソッドを実装していれば、使用することができます。

・配列の型宣言

通常の(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;

赤紫蘇2では、aka::deep_ptr<>が定義されています。このテンプレートは、スマートポインタの一種ですが、コピー時に、内部のインスタンスを複製します。また、クラスの破棄時に内容を解放します。 クラスメンバにおいて、aka::deep_ptr<>を用いたメンバを定義することができます。この場合、出現頻度は、minOccurs=0, maxOccurs=1となります。(配列でも等価な定義は可能)


赤紫蘇2トップへ sourceforgeプロジェクトページへ