Reformat RAC spec example; link to ref impl
diff --git a/doc/spec/rac-spec.md b/doc/spec/rac-spec.md
index 2dee8c3..bf79c63 100644
--- a/doc/spec/rac-spec.md
+++ b/doc/spec/rac-spec.md
@@ -187,6 +187,9 @@
| CPtr[A] |V|A| CPtr[Arity] a.k.a. CPtrMax, Version, Arity
+-+-+-+-+-+-+-+-+
+See the "Examples" section below for example RAC files and, in particular,
+example `Branch Node`s.
+
For the `(XPtr | Other6 | Other7)` 8 byte fields, the `XPtr` occupies the low
48 bits (as a little-endian `uint64_t`) and the `Other` fields occupy the high
16 bits.
@@ -542,8 +545,9 @@
# Examples
These examples display RAC files in the format of the `hexdump -C` command line
-tool. They are deliberately very short, for ease of understanding, and
-therefore exhibit unusually bad compression ratios.
+tool. They are deliberately very short, for ease of understanding. Realistic
+RAC files, with larger chunk sizes, would typically exhibit much better
+compression ratios.
## Zlib Example (Root Node at End)
@@ -587,6 +591,9 @@
The third example demonstrates concatenating two RAC files: the two examples
above. The decompressed form of the resultant RAC file is the concatenation of
the two decompressed forms: "One sheep.\nTwo sheep.\nThree sheep.\nMore!\n".
+Its 41 decompressed bytes consists of the "sheep" RAC file's 35 bytes and then
+the "more" RAC file's 6 bytes. In hexadecimal, `0x29 = 0x23 + 0x06`, and the
+`0x29` and `0x23` numbers can be seen in the compressed form's bytes.
The compressed form (what's shown in `hexdump -C` format below) is the
concatenation of the two compressed forms, plus a new root node (64 bytes
@@ -627,26 +634,34 @@
00000100 00 00 04 01 b4 00 00 00 00 00 04 00 14 01 00 00
00000110 00 00 01 03
-Re-formatting to highlight the multiple-of-8-bytes structure:
+Re-formatting to highlight the groups-of-8-bytes structure and reprise the
+"Branch Nodes" section's diagram:
- 000000d4 72 c3 63 03 f8 ec 00 ff
- 000000dc 00 00 00 00 00 00 00 fe
- 000000e4 23 00 00 00 00 00 00 fe
- 000000ec 29 00 00 00 00 00 00 01
- --------
- 000000f4 9f 00 00 00 00 00 00 ff
- 000000fc 00 00 00 00 00 00 04 01
- 00000104 b4 00 00 00 00 00 04 00
- 0000010c 14 01 00 00 00 00 01 03
+ 000000d4 72 c3 63 03 f8 ec 00 ff |Magic|A|Che|0|T|
+ 000000dc 00 00 00 00 00 00 00 fe | DPtr[1] |0|T|
+ 000000e4 23 00 00 00 00 00 00 fe | DPtr[2] |0|T|
+ 000000ec 29 00 00 00 00 00 00 01 | DPtr[A] |0|C|
+ 000000f4 9f 00 00 00 00 00 00 ff | CPtr[0] |L|S|
+ 000000fc 00 00 00 00 00 00 04 01 | CPtr[1] |L|S|
+ 00000104 b4 00 00 00 00 00 04 00 | CPtr[2] |L|S|
+ 0000010c 14 01 00 00 00 00 01 03 | CPtr[A] |V|A|
Its `Codec` is `0x01`, "RAC + Zlib", its Version is `0x01` and its `Arity` is
`0x03`. The `DPtr` values are `0x0000` (implicit), `0x0000`, `0x0023` and
`0x0029`. The `CPtr` values are `0x009F`, `0x0000`, `0x00B4` and `0x0114` (the
size of the whole RAC file). Note that the `CPtr` values are not sorted. The
-two branch nodes' `TTag`s are `0xFE` and `0xFE` and their `STag`s are `0x01`
+last two children' `TTag`s are `0xFE` and `0xFE` and their `STag`s are `0x01`
and `0x00`, which means that they are both `CBiasing Branch Node`s.
+# Reference Implementation
+
+In the Go programming language:
+
+ - [RAC](https://godoc.org/github.com/google/wuffs/lib/rac)
+ - [RAC + Zlib](https://godoc.org/github.com/google/wuffs/lib/raczlib)
+
+
# Acknowledgements
I (Nigel Tao) thank Robert Obryk, Sanjay Ghemawat and Sean Klein for their