メインコンテンツまでスキップ

3. 追加の配列タグ

3. 追加の配列タグ

本仕様は、3 つの追加の配列タグを定義する。多次元配列タグ (Multi-dimensional Array tags) は、古典的 CBOR 配列とも型付き配列とも組み合わせることができ、サブ配列内の要素数が一定の多次元配列を構築するために用いられる。同種配列タグ (Homogeneous Array tag) は、型付き配列が適用できない場合でも、古典的 CBOR 配列を同種配列として識別するためのシグナルとしてアプリケーションが使用できる。

3.1 多次元配列

多次元配列は、2 つの (1 次元) 配列を含むタグ付き配列として表現される。第 1 の配列は多次元配列の次元を (外側の次元から内側の次元へ向かう順序で) 定義し、第 2 の配列は多次元配列の内容を表現する。第 2 の配列自体が型付き配列としてタグ付けされている場合、多次元配列の要素型は型付き配列の型と同一であることが分かる。

本書は 2 つのタグを定義する: 行優先順 (row-major order) で要素を並べるものと、列優先順 (column-major order) で並べるもの [RowColMajor] である。

3.1.1 行優先順

タグ: 40

データ項目: 2 つの配列からなる配列 (メジャータイプ 4): 1 つは次元 (0 以外の符号無し整数) の配列 (メジャータイプ 4)、もう 1 つは要素の配列 (メジャータイプ 4 の CBOR 配列、型付き配列、同種配列のいずれか)。

第 2 の配列内のデータは、最後の次元が連続している (行優先順) と見なされる連続した値で構成される。

図 1 は、C 言語での 2 次元配列の宣言と、多次元配列タグと型付き配列タグの両方を使用した CBOR での表現を示している。

uint16_t a[2][3] = {
{2, 4, 8}, /* row 0 */
{4, 16, 256},
};

<Tag 40> # 多次元配列タグ
82 # array(2)
82 # array(2)
02 # unsigned(2) 1st Dimension
03 # unsigned(3) 2nd Dimension
<Tag 65> # uint16 array
4c # byte string(12)
0002 # unsigned(2)
0004 # unsigned(4)
0008 # unsigned(8)
0004 # unsigned(4)
0010 # unsigned(16)
0100 # unsigned(256)

図 1: C と CBOR における多次元配列

図 2 は、基本的な CBOR 配列と組み合わせて多次元配列タグを使用した同じ 2 次元配列を示している (この例で選択された小さな数値では、たまたまこちらの方が短くなる)。

<Tag 40> # 多次元配列タグ
82 # array(2)
82 # array(2)
02 # unsigned(2) 1st Dimension
03 # unsigned(3) 2nd Dimension
86 # array(6)
02 # unsigned(2)
04 # unsigned(4)
08 # unsigned(8)
04 # unsigned(4)
10 # unsigned(16)
19 0100 # unsigned(256)

図 2: 基本的な CBOR 配列を使用した多次元配列

3.1.2 列優先順

前の小小節で指定した多次元配列は「行優先 (row major)」順であり、これは本仕様の目的において好ましい順序である。「列優先 (column major)」順配列を使用する類似の表現を、図 3 に示すように、本小節ではタグ 1040 の下で提供する。

タグ: 1040

データ項目: タグ 40 と同じだが、第 2 の配列内のデータは、最初の次元が連続している (列優先順) と見なされる連続した値で構成される点が異なる。

<Tag 1040> # 多次元配列タグ, 列優先順
82 # array(2)
82 # array(2)
02 # unsigned(2) 第1次元
03 # unsigned(3) 第2次元
86 # array(6)
02 # unsigned(2)
04 # unsigned(4)
04 # unsigned(4)
10 # unsigned(16)
08 # unsigned(8)
19 0100 # unsigned(256)

図 3: 基本的な CBOR 配列を使用した多次元配列 (列優先順)

3.2 同種配列

タグ: 41

データ項目: 配列 (メジャータイプ 4)