X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=spv-file-format.texi;h=a5f45e5b4979f7a86307413c2ad4a8c304658a5c;hb=463238cd3f894fc6fb5cebbcc7bb2b9584c640a8;hp=bb615a2384333bd3fd4166b21a38f04dceffeefd;hpb=2aed65a53e0d5ae8d7abc77f6cbd7cf055b37ceb;p=pspp diff --git a/spv-file-format.texi b/spv-file-format.texi index bb615a2384..a5f45e5b49 100644 --- a/spv-file-format.texi +++ b/spv-file-format.texi @@ -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.