diff --git a/docs/spec/spec.adoc b/docs/spec/spec.adoc index d3e5f49..2781066 100644 --- a/docs/spec/spec.adoc +++ b/docs/spec/spec.adoc @@ -34,4 +34,8 @@ include::structs/header.adoc[] <<< -include::structs/blocks.adoc[] \ No newline at end of file +include::structs/blocks.adoc[] + +<<< + +include::structs/index2.adoc[] \ No newline at end of file diff --git a/docs/spec/structs/index2.adoc b/docs/spec/structs/index2.adoc new file mode 100644 index 0000000..6d4b3e8 --- /dev/null +++ b/docs/spec/structs/index2.adoc @@ -0,0 +1,85 @@ +=== The index block version 2 (`IDX2`) + +The index block stores references to all blocks present in the file. +It is composed of a header, followed by a sequence of entries, the count of which is defined within the header. + +Multiple index blocks may exist within a file to represent previous states or historical versions; however, only the final index block must be referenced by the main file header. + +==== Structure Definition + +[source,c] +#define INDEX2_MAGIC 0x32584449 +/**Header for the index, followed by entries */ +typedef struct IndexHeader2 +{ + /**Identifier, */ + uint32_t identifier; + /**How many entries follow this header */ + uint64_t entries; + /**CRC64-ECMA of the index */ + uint64_t crc64; +} IndexHeader; + +==== Field Descriptions + +[cols="2,2,2,6",options="header"] +|=== +|Type +|Size +|Name +|Description + +|uint32_t +|4 bytes +|identifier +|The index block identifier, always `IDX2` + +|uint64_t +|8 bytes +|entries +|The number of entries following this header + +|uint64_t +|8 bytes +|crc64 +|CRC64-ECMA checksum of the entries following this header +|=== + +==== Index entries + +[source,c] +/**Index entry */ +typedef struct IndexEntry +{ + /**Type of item pointed by this entry */ + uint32_t blockType; + /**Type of data contained by the block pointed by this entry */ + uint32_t dataType; + /**Offset in file where item is stored */ + uint64_t offset; +} IndexEntry; + +==== Field Descriptions + +[cols="2,2,2,6",options="header"] +|=== +|Type +|Size +|Name +|Description + +|uint32_t +|4 bytes +|blockType +|The type of block this entry points to. + +|uint32_t +|4 bytes +|dataType +|The type of data the block pointed by this entry contains. + +|uint64_t +|8 bytes +|offset +|The offset in bytes from the start of the file where the block pointed by this entry starts. +|=== \ No newline at end of file