The final part of an SPV light member contains the actual data.
Data ⇒ int[layers] int[rows] int[columns] int*[n-dimensions] int[n-data] Datum*[n-data] Datum ⇒ int64[index] v1(00?) Value
The values of
each specifies the number of dimensions displayed in layers, rows, and
columns, respectively. Any of them may be zero. Their values sum to
n-dimensions from Dimensions (see SPV Light Member Dimensions).
n-dimensions integers are a permutation of the 0-based
dimension numbers. The first
n-layers integers specify each of
the dimensions represented by layers, the next
specify the dimensions represented by rows, and the final
n-columns integers specify the dimensions represented by
columns. When there is more than one dimension of a given kind, the
inner dimensions are given first.
The format of a Datum varies slightly from version 1 to version 3: in version 1 it allows for an extra optional 00 byte.
A Datum consists of an
index and a Value. Suppose there are
d dimensions and dimension i, 0 \le i < d, has
n_i categories. Consider the datum at coordinates x_i,
0 \le i < d, and note that 0 \le x_i < n_i. Then the
index is calculated by the following algorithm:
let index = 0 for each i from 0 to d - 1: index = (n_i \times index) + x_i
For example, suppose there are 3 dimensions with 3, 4, and 5
categories, respectively. The datum at coordinates (1, 2, 3) has
index 5 \times (4 \times (3 \times 0 + 1) + 2) + 3 = 33.
Within a given dimension, the index is the
cat-index in a Leaf.