Document datum format.
[pspp] / spv-file-format.texi
index bb615a2384333bd3fd4166b21a38f04dceffeefd..a5f45e5b4979f7a86307413c2ad4a8c304658a5c 100644 (file)
@@ -557,6 +557,7 @@ be naive.
 
 @example
 data := int[layers] int[rows] int[columns] int*[n-dimensions]
+        int[n-data] datum*[n-data]
 @end example
 
 The values of @code{layers}, @code{rows}, and @code{columns} each
@@ -571,3 +572,27 @@ specify the dimensions represented by rows, and the final
 @code{columns} of them specify the dimensions represented by columns.
 When there is more than one dimension of a given kind, the inner
 dimensions are given first.
+
+@example
+datum := int64[index] 00? value        @r{# Version 1.}
+datum := int64[index] value            @r{# Version 3.}
+@end example
+
+A datum consists of an index and a value.  Suppose there are @math{d}
+dimensions and dimension @math{i} for @math{0 \le i < d} has
+@math{n_i} categories.  Consider the datum at coordinates @math{x_i}
+for @math{0 \le i < d}; note that @math{0 \le x_i < n_i}.  Then the
+index is calculated by the following algorithm:
+
+@display
+let index = 0
+for each @math{i} from 0 to @math{d - 1}:
+    index = @math{n_i \times} index + @math{x_i}
+@end display
+
+For example, suppose there are 3 dimensions with 3, 4, and 5
+categories, respectively.  The datum at coordinates (1, 2, 3) has
+index @math{5 \times (4 \times (3 \times 0 + 1) + 2) + 3 = 33}.
+
+The format of a datum varies slightly from version 1 to version 3, in
+that version 1 has an extra optional 00 byte.