| 89 | } |
| 90 | |
| 91 | void writeKeyTree(size_t begin, size_t end) |
| 92 | { |
| 93 | size_t mid = (begin + end) / 2; |
| 94 | // Write middle string, with length prefix: |
| 95 | slice str = _strings[mid]; |
| 96 | writeVarInt(str.size); |
| 97 | write(str); |
| 98 | |
| 99 | if (end - begin > 1) { |
| 100 | if (mid+1 < end) { |
| 101 | size_t leftSize = _sizes[(begin + mid) / 2]; |
| 102 | writeVarInt(leftSize); // Write right subtree offset |
| 103 | writeKeyTree(begin, mid); // Write left subtree |
| 104 | writeKeyTree(mid+1, end); // Write right subtree |
| 105 | } else { |
| 106 | writeByte(0); // No right subtree (offset 0) |
| 107 | writeKeyTree(begin, mid); // Write left subtree |
| 108 | } |
| 109 | } |
| 110 | } |
| 111 | |
| 112 | inline void writeByte(uint8_t byte) { |
| 113 | *_out++ = byte; |
nothing calls this directly
no outgoing calls
no test coverage detected