struct ZSTD_DDict_s {
- void* dictContent;
- size_t dictContentSize;
+ void* dict;
+ size_t dictSize;
ZSTD_DCtx* refContext;
}; /* typedef'd tp ZSTD_CDict within zstd.h */
return NULL;
} }
- ddict->dictContent = dictContent;
- ddict->dictContentSize = dictSize;
+ ddict->dict = dictContent;
+ ddict->dictSize = dictSize;
ddict->refContext = dctx;
return ddict;
}
ZSTD_freeFunction const cFree = ddict->refContext->customMem.customFree;
void* const opaque = ddict->refContext->customMem.opaque;
ZSTD_freeDCtx(ddict->refContext);
- cFree(opaque, ddict->dictContent);
+ cFree(opaque, ddict->dict);
cFree(opaque, ddict);
return 0;
}
### Version
-0.0.2 (July 2016 - Work in progress - unfinished)
+0.1.0 (08/07/16)
Introduction
pushing the other ones by one position.
+Dictionary format
+-----------------
+
+`zstd` is compatible with "pure content" dictionaries, free of any format restriction.
+But dictionaries created by `zstd --train` follow a format, described here.
+
+__Pre-requisites__ : a dictionary has a known length,
+ defined either by a buffer limit, or a file size.
+
+| Header | DictID | Stats | Content |
+| ------ | ------ | ----- | ------- |
+
+__Header__ : 4 bytes ID, value 0xEC30A437, Little Endian format
+
+__Dict_ID__ : 4 bytes, stored in Little Endian format.
+ DictID can be any value, except 0 (which means no DictID).
+ It's used by decoders to check they use the correct dictionary.
+
+__Stats__ : Entropy tables, following the same format as a [compressed blocks].
+ They are stored in following order :
+ Huffman tables for literals, FSE table for offset,
+ FSE table for matchLenth, and finally FSE table for litLength.
+ It's then followed by 3 offset values, populating recent offsets,
+ stored in order 4-bytes little endian each, for a total of 12 bytes.
+
+__Content__ : Where the actual dictionary content is.
+ Content depends on Dictionary size.
+
+[compressed blocks]: #compressed-block-format
+
Version changes
---------------
+0.1.0 initial release