@bradensbay/globals-core 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +69 -0
- package/dist/src/allocator.d.ts +78 -0
- package/dist/src/allocator.d.ts.map +1 -0
- package/dist/src/allocator.js +211 -0
- package/dist/src/allocator.js.map +1 -0
- package/dist/src/arena.d.ts +81 -0
- package/dist/src/arena.d.ts.map +1 -0
- package/dist/src/arena.js +224 -0
- package/dist/src/arena.js.map +1 -0
- package/dist/src/checksum.d.ts +5 -0
- package/dist/src/checksum.d.ts.map +1 -0
- package/dist/src/checksum.js +35 -0
- package/dist/src/checksum.js.map +1 -0
- package/dist/src/draft.d.ts +48 -0
- package/dist/src/draft.d.ts.map +1 -0
- package/dist/src/draft.js +427 -0
- package/dist/src/draft.js.map +1 -0
- package/dist/src/errors.d.ts +56 -0
- package/dist/src/errors.d.ts.map +1 -0
- package/dist/src/errors.js +69 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/external.d.ts +52 -0
- package/dist/src/external.d.ts.map +1 -0
- package/dist/src/external.js +68 -0
- package/dist/src/external.js.map +1 -0
- package/dist/src/hamt.d.ts +87 -0
- package/dist/src/hamt.d.ts.map +1 -0
- package/dist/src/hamt.js +643 -0
- package/dist/src/hamt.js.map +1 -0
- package/dist/src/history.d.ts +45 -0
- package/dist/src/history.d.ts.map +1 -0
- package/dist/src/history.js +49 -0
- package/dist/src/history.js.map +1 -0
- package/dist/src/index.d.ts +55 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +38 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/inspect.d.ts +74 -0
- package/dist/src/inspect.d.ts.map +1 -0
- package/dist/src/inspect.js +127 -0
- package/dist/src/inspect.js.map +1 -0
- package/dist/src/layout.d.ts +130 -0
- package/dist/src/layout.d.ts.map +1 -0
- package/dist/src/layout.js +149 -0
- package/dist/src/layout.js.map +1 -0
- package/dist/src/liveness.d.ts +48 -0
- package/dist/src/liveness.d.ts.map +1 -0
- package/dist/src/liveness.js +92 -0
- package/dist/src/liveness.js.map +1 -0
- package/dist/src/owner.d.ts +130 -0
- package/dist/src/owner.d.ts.map +1 -0
- package/dist/src/owner.js +368 -0
- package/dist/src/owner.js.map +1 -0
- package/dist/src/reader.d.ts +122 -0
- package/dist/src/reader.d.ts.map +1 -0
- package/dist/src/reader.js +325 -0
- package/dist/src/reader.js.map +1 -0
- package/dist/src/readers.d.ts +60 -0
- package/dist/src/readers.d.ts.map +1 -0
- package/dist/src/readers.js +122 -0
- package/dist/src/readers.js.map +1 -0
- package/dist/src/retained.d.ts +39 -0
- package/dist/src/retained.d.ts.map +1 -0
- package/dist/src/retained.js +99 -0
- package/dist/src/retained.js.map +1 -0
- package/dist/src/schema.d.ts +82 -0
- package/dist/src/schema.d.ts.map +1 -0
- package/dist/src/schema.js +18 -0
- package/dist/src/schema.js.map +1 -0
- package/dist/src/store.d.ts +83 -0
- package/dist/src/store.d.ts.map +1 -0
- package/dist/src/store.js +127 -0
- package/dist/src/store.js.map +1 -0
- package/dist/src/strings.d.ts +37 -0
- package/dist/src/strings.d.ts.map +1 -0
- package/dist/src/strings.js +144 -0
- package/dist/src/strings.js.map +1 -0
- package/dist/src/tags.d.ts +47 -0
- package/dist/src/tags.d.ts.map +1 -0
- package/dist/src/tags.js +53 -0
- package/dist/src/tags.js.map +1 -0
- package/dist/src/values.d.ts +90 -0
- package/dist/src/values.d.ts.map +1 -0
- package/dist/src/values.js +458 -0
- package/dist/src/values.js.map +1 -0
- package/dist/src/vector.d.ts +64 -0
- package/dist/src/vector.d.ts.map +1 -0
- package/dist/src/vector.js +387 -0
- package/dist/src/vector.js.map +1 -0
- package/dist/src/verify.d.ts +38 -0
- package/dist/src/verify.d.ts.map +1 -0
- package/dist/src/verify.js +179 -0
- package/dist/src/verify.js.map +1 -0
- package/dist/src/view.d.ts +66 -0
- package/dist/src/view.d.ts.map +1 -0
- package/dist/src/view.js +278 -0
- package/dist/src/view.js.map +1 -0
- package/package.json +28 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"values.js","sourceRoot":"","sources":["../../src/values.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { SharedArena } from "./arena.js";
|
|
2
|
+
import type { Allocator } from "./allocator.js";
|
|
3
|
+
import type { Slot } from "./values.js";
|
|
4
|
+
/**
|
|
5
|
+
* A chunked persistent vector, the array counterpart to the HAMT.
|
|
6
|
+
*
|
|
7
|
+
* A 32 way trie with a tail buffer, which is the structure Clojure uses. Appending is
|
|
8
|
+
* amortised constant time because it lands in the tail, and setting an index copies one path
|
|
9
|
+
* of at most seven nodes rather than the whole array.
|
|
10
|
+
*
|
|
11
|
+
* Header layout, at the payload offset the allocator returns:
|
|
12
|
+
*
|
|
13
|
+
* word 0 magic
|
|
14
|
+
* word 1 count, the total element count including the tail
|
|
15
|
+
* word 2 shift, five times the trie depth above the leaves
|
|
16
|
+
* word 3 root node offset, zero when the trie is empty
|
|
17
|
+
* word 4 tail node offset, zero when the tail is empty
|
|
18
|
+
*
|
|
19
|
+
* Internal node: word 0 child count, then that many child offsets.
|
|
20
|
+
* Leaf node: word 0 slot count, then that many slots of two words each.
|
|
21
|
+
*/
|
|
22
|
+
export declare const VECTOR_MAGIC = 1447379712;
|
|
23
|
+
export declare const EMPTY_VECTOR = 0;
|
|
24
|
+
export interface VectorContext {
|
|
25
|
+
readonly arena: SharedArena;
|
|
26
|
+
readonly allocator: Allocator;
|
|
27
|
+
/** Nodes replaced on the copied path. The commit retires them. */
|
|
28
|
+
readonly retired: number[];
|
|
29
|
+
/** Every block this operation allocated, so a rejected write can release them. */
|
|
30
|
+
readonly allocated: number[];
|
|
31
|
+
}
|
|
32
|
+
export interface VectorHeader {
|
|
33
|
+
readonly count: number;
|
|
34
|
+
readonly shift: number;
|
|
35
|
+
readonly root: number;
|
|
36
|
+
readonly tail: number;
|
|
37
|
+
readonly tailOffset: number;
|
|
38
|
+
}
|
|
39
|
+
export declare function readHeader(arena: SharedArena, vector: number): VectorHeader;
|
|
40
|
+
export declare function vectorGet(arena: SharedArena, vector: number, index: number): Slot | undefined;
|
|
41
|
+
export declare function vectorLength(arena: SharedArena, vector: number): number;
|
|
42
|
+
export declare function emptyVector(context: VectorContext): number;
|
|
43
|
+
/** Replace one element. Copies the path to it and nothing else. */
|
|
44
|
+
export declare function vectorAssoc(context: VectorContext, vector: number, index: number, slot: Slot): number;
|
|
45
|
+
/** Append one element. Amortised constant time, because it usually lands in the tail. */
|
|
46
|
+
export declare function vectorPush(context: VectorContext, vector: number, slot: Slot): number;
|
|
47
|
+
/** Every slot in order. Used by eager decoding and by rebuilds. */
|
|
48
|
+
export declare function vectorSlots(arena: SharedArena, vector: number): Slot[];
|
|
49
|
+
/**
|
|
50
|
+
* Build a vector from slots, bottom up.
|
|
51
|
+
*
|
|
52
|
+
* Used for array literals and for the operations that cannot be expressed as a path copy,
|
|
53
|
+
* such as splice and sort.
|
|
54
|
+
*
|
|
55
|
+
* Built in one pass rather than by repeated push. Pushing N elements copies the tail leaf on
|
|
56
|
+
* every call and allocates a header each time, so building a twenty thousand element array
|
|
57
|
+
* that way churned megabytes of intermediate blocks and could exhaust an arena that had
|
|
58
|
+
* ample room for the result. This allocates the leaves once, the internal nodes once, and one
|
|
59
|
+
* header.
|
|
60
|
+
*/
|
|
61
|
+
export declare function vectorFromSlots(context: VectorContext, slots: readonly Slot[]): number;
|
|
62
|
+
/** Every node making up a vector, for retiring a structure the writer is discarding. */
|
|
63
|
+
export declare function vectorNodes(arena: SharedArena, vector: number, out?: number[]): number[];
|
|
64
|
+
//# sourceMappingURL=vector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector.d.ts","sourceRoot":"","sources":["../../src/vector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAExC;;;;;;;;;;;;;;;;;GAiBG;AAEH,eAAO,MAAM,YAAY,aAAa,CAAC;AAevC,eAAO,MAAM,YAAY,IAAI,CAAC;AAE9B,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,kEAAkE;IAClE,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAC3B,kFAAkF;IAClF,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,CA8B3E;AA+FD,wBAAgB,SAAS,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAa7F;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAGvE;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAE1D;AAyCD,mEAAmE;AACnE,wBAAgB,WAAW,CACzB,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,IAAI,GACT,MAAM,CAkBR;AA0CD,yFAAyF;AACzF,wBAAgB,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,CAqDrF;AAED,mEAAmE;AACnE,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,CAYtE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,IAAI,EAAE,GAAG,MAAM,CA2CtF;AAED,wFAAwF;AACxF,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,EAAO,GAAG,MAAM,EAAE,CAW5F"}
|
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
import { ArenaCorruptError } from "./errors.js";
|
|
2
|
+
import { SLOT_BYTES, WORD } from "./layout.js";
|
|
3
|
+
/**
|
|
4
|
+
* A chunked persistent vector, the array counterpart to the HAMT.
|
|
5
|
+
*
|
|
6
|
+
* A 32 way trie with a tail buffer, which is the structure Clojure uses. Appending is
|
|
7
|
+
* amortised constant time because it lands in the tail, and setting an index copies one path
|
|
8
|
+
* of at most seven nodes rather than the whole array.
|
|
9
|
+
*
|
|
10
|
+
* Header layout, at the payload offset the allocator returns:
|
|
11
|
+
*
|
|
12
|
+
* word 0 magic
|
|
13
|
+
* word 1 count, the total element count including the tail
|
|
14
|
+
* word 2 shift, five times the trie depth above the leaves
|
|
15
|
+
* word 3 root node offset, zero when the trie is empty
|
|
16
|
+
* word 4 tail node offset, zero when the tail is empty
|
|
17
|
+
*
|
|
18
|
+
* Internal node: word 0 child count, then that many child offsets.
|
|
19
|
+
* Leaf node: word 0 slot count, then that many slots of two words each.
|
|
20
|
+
*/
|
|
21
|
+
export const VECTOR_MAGIC = 0x56454300;
|
|
22
|
+
const NODE_MAGIC = 0x564e4400;
|
|
23
|
+
const LEAF_MAGIC = 0x564c4600;
|
|
24
|
+
const BITS = 5;
|
|
25
|
+
const WIDTH = 1 << BITS;
|
|
26
|
+
const MASK = WIDTH - 1;
|
|
27
|
+
const H_MAGIC = 0;
|
|
28
|
+
const H_COUNT = 1;
|
|
29
|
+
const H_SHIFT = 2;
|
|
30
|
+
const H_ROOT = 3;
|
|
31
|
+
const H_TAIL = 4;
|
|
32
|
+
const HEADER_WORDS = 5;
|
|
33
|
+
export const EMPTY_VECTOR = 0;
|
|
34
|
+
export function readHeader(arena, vector) {
|
|
35
|
+
const byteSize = arena.checkBlock(vector, "vector header");
|
|
36
|
+
if (byteSize < HEADER_WORDS * WORD) {
|
|
37
|
+
throw new ArenaCorruptError(`vector header at ${vector} is too small`, { offset: vector });
|
|
38
|
+
}
|
|
39
|
+
const base = vector / WORD;
|
|
40
|
+
if (arena.words[base + H_MAGIC] !== VECTOR_MAGIC) {
|
|
41
|
+
throw new ArenaCorruptError(`no vector header at ${vector}`, { offset: vector });
|
|
42
|
+
}
|
|
43
|
+
const count = arena.words[base + H_COUNT];
|
|
44
|
+
const shift = arena.words[base + H_SHIFT];
|
|
45
|
+
// Every element occupies at least one eight byte slot somewhere, so a count larger than the
|
|
46
|
+
// buffer can hold is impossible. Without this bound a corrupted count sends the decoder off
|
|
47
|
+
// to build an array of two billion elements, which takes the process down rather than
|
|
48
|
+
// failing closed. The fuzzer found this by crashing V8.
|
|
49
|
+
const impossibleCount = count < 0 || count > arena.byteLength / SLOT_BYTES;
|
|
50
|
+
if (impossibleCount || shift < 0 || shift > 30) {
|
|
51
|
+
throw new ArenaCorruptError(`vector at ${vector} has an impossible count ${count} or shift ${shift}`, { offset: vector });
|
|
52
|
+
}
|
|
53
|
+
const tailLength = count === 0 ? 0 : ((count - 1) % WIDTH) + 1;
|
|
54
|
+
return {
|
|
55
|
+
count,
|
|
56
|
+
shift,
|
|
57
|
+
root: arena.words[base + H_ROOT],
|
|
58
|
+
tail: arena.words[base + H_TAIL],
|
|
59
|
+
tailOffset: count - tailLength,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
function leafCount(arena, leaf) {
|
|
63
|
+
const byteSize = arena.checkBlock(leaf, "vector leaf");
|
|
64
|
+
const count = arena.words[leaf / WORD + 1];
|
|
65
|
+
if (arena.words[leaf / WORD] !== LEAF_MAGIC) {
|
|
66
|
+
throw new ArenaCorruptError(`no vector leaf at ${leaf}`, { offset: leaf });
|
|
67
|
+
}
|
|
68
|
+
if (count < 0 || count > WIDTH || (2 + count * 2) * WORD > byteSize) {
|
|
69
|
+
throw new ArenaCorruptError(`vector leaf at ${leaf} claims ${count} slots`, { offset: leaf });
|
|
70
|
+
}
|
|
71
|
+
return count;
|
|
72
|
+
}
|
|
73
|
+
function nodeCount(arena, node) {
|
|
74
|
+
const byteSize = arena.checkBlock(node, "vector node");
|
|
75
|
+
const count = arena.words[node / WORD + 1];
|
|
76
|
+
if (arena.words[node / WORD] !== NODE_MAGIC) {
|
|
77
|
+
throw new ArenaCorruptError(`no vector node at ${node}`, { offset: node });
|
|
78
|
+
}
|
|
79
|
+
if (count < 0 || count > WIDTH || (2 + count) * WORD > byteSize) {
|
|
80
|
+
throw new ArenaCorruptError(`vector node at ${node} claims ${count} children`, {
|
|
81
|
+
offset: node,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
return count;
|
|
85
|
+
}
|
|
86
|
+
function allocLeaf(context, count) {
|
|
87
|
+
const offset = context.allocator.allocate((2 + count * 2) * WORD);
|
|
88
|
+
context.allocated.push(offset);
|
|
89
|
+
const words = context.arena.words;
|
|
90
|
+
words[offset / WORD] = LEAF_MAGIC;
|
|
91
|
+
words[offset / WORD + 1] = count;
|
|
92
|
+
return offset;
|
|
93
|
+
}
|
|
94
|
+
function allocNode(context, count) {
|
|
95
|
+
const offset = context.allocator.allocate((2 + count) * WORD);
|
|
96
|
+
context.allocated.push(offset);
|
|
97
|
+
const words = context.arena.words;
|
|
98
|
+
words[offset / WORD] = NODE_MAGIC;
|
|
99
|
+
words[offset / WORD + 1] = count;
|
|
100
|
+
return offset;
|
|
101
|
+
}
|
|
102
|
+
function allocHeader(context, count, shift, root, tail) {
|
|
103
|
+
const offset = context.allocator.allocate(HEADER_WORDS * WORD);
|
|
104
|
+
context.allocated.push(offset);
|
|
105
|
+
const words = context.arena.words;
|
|
106
|
+
const base = offset / WORD;
|
|
107
|
+
words[base + H_MAGIC] = VECTOR_MAGIC;
|
|
108
|
+
words[base + H_COUNT] = count;
|
|
109
|
+
words[base + H_SHIFT] = shift;
|
|
110
|
+
words[base + H_ROOT] = root;
|
|
111
|
+
words[base + H_TAIL] = tail;
|
|
112
|
+
return offset;
|
|
113
|
+
}
|
|
114
|
+
function leafSlot(arena, leaf, index) {
|
|
115
|
+
const base = leaf / WORD + 2 + index * 2;
|
|
116
|
+
return { tag: arena.words[base], payload: arena.words[base + 1] };
|
|
117
|
+
}
|
|
118
|
+
function writeLeafSlot(arena, leaf, index, slot) {
|
|
119
|
+
const base = leaf / WORD + 2 + index * 2;
|
|
120
|
+
arena.words[base] = slot.tag;
|
|
121
|
+
arena.words[base + 1] = slot.payload;
|
|
122
|
+
}
|
|
123
|
+
function childAt(arena, node, index) {
|
|
124
|
+
return arena.words[node / WORD + 2 + index];
|
|
125
|
+
}
|
|
126
|
+
/** The leaf that holds `index`, following the trie down from the root. */
|
|
127
|
+
function leafFor(arena, header, index) {
|
|
128
|
+
if (index >= header.tailOffset)
|
|
129
|
+
return header.tail;
|
|
130
|
+
let node = header.root;
|
|
131
|
+
for (let shift = header.shift; shift > 0; shift -= BITS) {
|
|
132
|
+
const slot = (index >>> shift) & MASK;
|
|
133
|
+
const count = nodeCount(arena, node);
|
|
134
|
+
if (slot >= count) {
|
|
135
|
+
throw new ArenaCorruptError(`vector index ${index} walks off a node`, { offset: node });
|
|
136
|
+
}
|
|
137
|
+
node = childAt(arena, node, slot);
|
|
138
|
+
}
|
|
139
|
+
return node;
|
|
140
|
+
}
|
|
141
|
+
export function vectorGet(arena, vector, index) {
|
|
142
|
+
if (vector === EMPTY_VECTOR)
|
|
143
|
+
return undefined;
|
|
144
|
+
const header = readHeader(arena, vector);
|
|
145
|
+
if (!Number.isInteger(index) || index < 0 || index >= header.count)
|
|
146
|
+
return undefined;
|
|
147
|
+
const leaf = leafFor(arena, header, index);
|
|
148
|
+
const count = leafCount(arena, leaf);
|
|
149
|
+
const within = index & MASK;
|
|
150
|
+
if (within >= count) {
|
|
151
|
+
throw new ArenaCorruptError(`vector leaf is shorter than index ${index} requires`, {
|
|
152
|
+
offset: leaf,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
return leafSlot(arena, leaf, within);
|
|
156
|
+
}
|
|
157
|
+
export function vectorLength(arena, vector) {
|
|
158
|
+
if (vector === EMPTY_VECTOR)
|
|
159
|
+
return 0;
|
|
160
|
+
return readHeader(arena, vector).count;
|
|
161
|
+
}
|
|
162
|
+
export function emptyVector(context) {
|
|
163
|
+
return allocHeader(context, 0, BITS, 0, 0);
|
|
164
|
+
}
|
|
165
|
+
function copyLeafWith(context, leaf, index, slot) {
|
|
166
|
+
const arena = context.arena;
|
|
167
|
+
const count = leafCount(arena, leaf);
|
|
168
|
+
const created = allocLeaf(context, count);
|
|
169
|
+
for (let i = 0; i < count; i += 1) {
|
|
170
|
+
writeLeafSlot(arena, created, i, i === index ? slot : leafSlot(arena, leaf, i));
|
|
171
|
+
}
|
|
172
|
+
context.retired.push(leaf);
|
|
173
|
+
return created;
|
|
174
|
+
}
|
|
175
|
+
function assocInTrie(context, node, shift, index, slot) {
|
|
176
|
+
const arena = context.arena;
|
|
177
|
+
if (shift === 0)
|
|
178
|
+
return copyLeafWith(context, node, index & MASK, slot);
|
|
179
|
+
const count = nodeCount(arena, node);
|
|
180
|
+
const childIndex = (index >>> shift) & MASK;
|
|
181
|
+
const child = childAt(arena, node, childIndex);
|
|
182
|
+
const newChild = assocInTrie(context, child, shift - BITS, index, slot);
|
|
183
|
+
const created = allocNode(context, count);
|
|
184
|
+
for (let i = 0; i < count; i += 1) {
|
|
185
|
+
arena.words[created / WORD + 2 + i] = i === childIndex ? newChild : childAt(arena, node, i);
|
|
186
|
+
}
|
|
187
|
+
context.retired.push(node);
|
|
188
|
+
return created;
|
|
189
|
+
}
|
|
190
|
+
/** Replace one element. Copies the path to it and nothing else. */
|
|
191
|
+
export function vectorAssoc(context, vector, index, slot) {
|
|
192
|
+
const arena = context.arena;
|
|
193
|
+
const header = readHeader(arena, vector);
|
|
194
|
+
if (!Number.isInteger(index) || index < 0 || index >= header.count) {
|
|
195
|
+
throw new RangeError(`index ${index} is outside a vector of length ${header.count}`);
|
|
196
|
+
}
|
|
197
|
+
if (index >= header.tailOffset) {
|
|
198
|
+
const tail = copyLeafWith(context, header.tail, index - header.tailOffset, slot);
|
|
199
|
+
const created = allocHeader(context, header.count, header.shift, header.root, tail);
|
|
200
|
+
context.retired.push(vector);
|
|
201
|
+
return created;
|
|
202
|
+
}
|
|
203
|
+
const root = assocInTrie(context, header.root, header.shift, index, slot);
|
|
204
|
+
const created = allocHeader(context, header.count, header.shift, root, header.tail);
|
|
205
|
+
context.retired.push(vector);
|
|
206
|
+
return created;
|
|
207
|
+
}
|
|
208
|
+
function newPath(context, shift, leaf) {
|
|
209
|
+
if (shift === 0)
|
|
210
|
+
return leaf;
|
|
211
|
+
const node = allocNode(context, 1);
|
|
212
|
+
context.arena.words[node / WORD + 2] = newPath(context, shift - BITS, leaf);
|
|
213
|
+
return node;
|
|
214
|
+
}
|
|
215
|
+
function pushLeaf(context, node, shift, count, leaf) {
|
|
216
|
+
const arena = context.arena;
|
|
217
|
+
const childIndex = ((count - 1) >>> shift) & MASK;
|
|
218
|
+
const existing = nodeCount(arena, node);
|
|
219
|
+
if (shift === BITS) {
|
|
220
|
+
const created = allocNode(context, Math.max(existing, childIndex + 1));
|
|
221
|
+
for (let i = 0; i < existing; i += 1) {
|
|
222
|
+
arena.words[created / WORD + 2 + i] = childAt(arena, node, i);
|
|
223
|
+
}
|
|
224
|
+
arena.words[created / WORD + 2 + childIndex] = leaf;
|
|
225
|
+
context.retired.push(node);
|
|
226
|
+
return created;
|
|
227
|
+
}
|
|
228
|
+
const created = allocNode(context, Math.max(existing, childIndex + 1));
|
|
229
|
+
for (let i = 0; i < existing; i += 1) {
|
|
230
|
+
arena.words[created / WORD + 2 + i] = childAt(arena, node, i);
|
|
231
|
+
}
|
|
232
|
+
arena.words[created / WORD + 2 + childIndex] =
|
|
233
|
+
childIndex < existing
|
|
234
|
+
? pushLeaf(context, childAt(arena, node, childIndex), shift - BITS, count, leaf)
|
|
235
|
+
: newPath(context, shift - BITS, leaf);
|
|
236
|
+
context.retired.push(node);
|
|
237
|
+
return created;
|
|
238
|
+
}
|
|
239
|
+
/** Append one element. Amortised constant time, because it usually lands in the tail. */
|
|
240
|
+
export function vectorPush(context, vector, slot) {
|
|
241
|
+
const arena = context.arena;
|
|
242
|
+
const header = readHeader(arena, vector);
|
|
243
|
+
const tailLength = header.count - header.tailOffset;
|
|
244
|
+
if (header.count === 0) {
|
|
245
|
+
const tail = allocLeaf(context, 1);
|
|
246
|
+
writeLeafSlot(arena, tail, 0, slot);
|
|
247
|
+
const created = allocHeader(context, 1, BITS, 0, tail);
|
|
248
|
+
context.retired.push(vector);
|
|
249
|
+
return created;
|
|
250
|
+
}
|
|
251
|
+
if (tailLength < WIDTH) {
|
|
252
|
+
const tail = allocLeaf(context, tailLength + 1);
|
|
253
|
+
for (let i = 0; i < tailLength; i += 1) {
|
|
254
|
+
writeLeafSlot(arena, tail, i, leafSlot(arena, header.tail, i));
|
|
255
|
+
}
|
|
256
|
+
writeLeafSlot(arena, tail, tailLength, slot);
|
|
257
|
+
context.retired.push(header.tail);
|
|
258
|
+
const created = allocHeader(context, header.count + 1, header.shift, header.root, tail);
|
|
259
|
+
context.retired.push(vector);
|
|
260
|
+
return created;
|
|
261
|
+
}
|
|
262
|
+
// The tail is full, so it becomes a leaf in the trie and a fresh tail starts.
|
|
263
|
+
const newTail = allocLeaf(context, 1);
|
|
264
|
+
writeLeafSlot(arena, newTail, 0, slot);
|
|
265
|
+
let root;
|
|
266
|
+
let shift = header.shift;
|
|
267
|
+
if (header.root === 0) {
|
|
268
|
+
root = header.tail;
|
|
269
|
+
shift = BITS;
|
|
270
|
+
// A one leaf trie is addressed with shift zero at the root.
|
|
271
|
+
const created = allocHeader(context, header.count + 1, 0, root, newTail);
|
|
272
|
+
context.retired.push(vector);
|
|
273
|
+
return created;
|
|
274
|
+
}
|
|
275
|
+
const overflow = header.count >>> BITS > 1 << header.shift;
|
|
276
|
+
if (overflow) {
|
|
277
|
+
root = allocNode(context, 2);
|
|
278
|
+
arena.words[root / WORD + 2] = header.root;
|
|
279
|
+
arena.words[root / WORD + 3] = newPath(context, header.shift, header.tail);
|
|
280
|
+
shift = header.shift + BITS;
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
root = pushLeaf(context, header.root, header.shift, header.count, header.tail);
|
|
284
|
+
}
|
|
285
|
+
const created = allocHeader(context, header.count + 1, shift, root, newTail);
|
|
286
|
+
context.retired.push(vector);
|
|
287
|
+
return created;
|
|
288
|
+
}
|
|
289
|
+
/** Every slot in order. Used by eager decoding and by rebuilds. */
|
|
290
|
+
export function vectorSlots(arena, vector) {
|
|
291
|
+
if (vector === EMPTY_VECTOR)
|
|
292
|
+
return [];
|
|
293
|
+
const header = readHeader(arena, vector);
|
|
294
|
+
const out = [];
|
|
295
|
+
for (let i = 0; i < header.count; i += 1) {
|
|
296
|
+
const slot = vectorGet(arena, vector, i);
|
|
297
|
+
if (slot === undefined) {
|
|
298
|
+
throw new ArenaCorruptError(`vector reports ${header.count} elements but index ${i} is absent`);
|
|
299
|
+
}
|
|
300
|
+
out.push(slot);
|
|
301
|
+
}
|
|
302
|
+
return out;
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Build a vector from slots, bottom up.
|
|
306
|
+
*
|
|
307
|
+
* Used for array literals and for the operations that cannot be expressed as a path copy,
|
|
308
|
+
* such as splice and sort.
|
|
309
|
+
*
|
|
310
|
+
* Built in one pass rather than by repeated push. Pushing N elements copies the tail leaf on
|
|
311
|
+
* every call and allocates a header each time, so building a twenty thousand element array
|
|
312
|
+
* that way churned megabytes of intermediate blocks and could exhaust an arena that had
|
|
313
|
+
* ample room for the result. This allocates the leaves once, the internal nodes once, and one
|
|
314
|
+
* header.
|
|
315
|
+
*/
|
|
316
|
+
export function vectorFromSlots(context, slots) {
|
|
317
|
+
const arena = context.arena;
|
|
318
|
+
const count = slots.length;
|
|
319
|
+
if (count === 0)
|
|
320
|
+
return emptyVector(context);
|
|
321
|
+
// The tail holds the last partial chunk, or a full one when the count divides evenly.
|
|
322
|
+
const tailLength = ((count - 1) % WIDTH) + 1;
|
|
323
|
+
const trieCount = count - tailLength;
|
|
324
|
+
const tail = allocLeaf(context, tailLength);
|
|
325
|
+
for (let i = 0; i < tailLength; i += 1) {
|
|
326
|
+
writeLeafSlot(arena, tail, i, slots[trieCount + i]);
|
|
327
|
+
}
|
|
328
|
+
if (trieCount === 0)
|
|
329
|
+
return allocHeader(context, count, 0, 0, tail);
|
|
330
|
+
let level = [];
|
|
331
|
+
for (let start = 0; start < trieCount; start += WIDTH) {
|
|
332
|
+
const leaf = allocLeaf(context, WIDTH);
|
|
333
|
+
for (let i = 0; i < WIDTH; i += 1) {
|
|
334
|
+
writeLeafSlot(arena, leaf, i, slots[start + i]);
|
|
335
|
+
}
|
|
336
|
+
level.push(leaf);
|
|
337
|
+
}
|
|
338
|
+
// A single leaf is addressed with shift zero, so the depth only starts counting once there
|
|
339
|
+
// is an internal node above it.
|
|
340
|
+
let shift = 0;
|
|
341
|
+
while (level.length > 1) {
|
|
342
|
+
const parents = [];
|
|
343
|
+
for (let start = 0; start < level.length; start += WIDTH) {
|
|
344
|
+
const children = level.slice(start, start + WIDTH);
|
|
345
|
+
const node = allocNode(context, children.length);
|
|
346
|
+
for (let i = 0; i < children.length; i += 1) {
|
|
347
|
+
arena.words[node / WORD + 2 + i] = children[i];
|
|
348
|
+
}
|
|
349
|
+
parents.push(node);
|
|
350
|
+
}
|
|
351
|
+
level = parents;
|
|
352
|
+
shift += BITS;
|
|
353
|
+
}
|
|
354
|
+
return allocHeader(context, count, shift, level[0], tail);
|
|
355
|
+
}
|
|
356
|
+
/** Every node making up a vector, for retiring a structure the writer is discarding. */
|
|
357
|
+
export function vectorNodes(arena, vector, out = []) {
|
|
358
|
+
if (vector === EMPTY_VECTOR)
|
|
359
|
+
return out;
|
|
360
|
+
const header = readHeader(arena, vector);
|
|
361
|
+
out.push(vector);
|
|
362
|
+
if (header.tail !== 0)
|
|
363
|
+
out.push(header.tail);
|
|
364
|
+
// A node needs at least three words, so the buffer cannot hold more than this many however
|
|
365
|
+
// a corrupt trie is arranged. Without the bound, a child pointing back at an ancestor fans
|
|
366
|
+
// out inside the shift bound and exhausts the heap.
|
|
367
|
+
const budget = Math.ceil(arena.byteLength / 12);
|
|
368
|
+
if (header.root !== 0)
|
|
369
|
+
collectTrie(arena, header.root, header.shift, out, budget);
|
|
370
|
+
return out;
|
|
371
|
+
}
|
|
372
|
+
function collectTrie(arena, node, shift, out, budget) {
|
|
373
|
+
if (shift < 0) {
|
|
374
|
+
throw new ArenaCorruptError("vector trie walk went below the leaf level", { offset: node });
|
|
375
|
+
}
|
|
376
|
+
if (out.length > budget) {
|
|
377
|
+
throw new ArenaCorruptError(`vector walk exceeded ${budget} nodes, which is more than the buffer can hold`, { offset: node });
|
|
378
|
+
}
|
|
379
|
+
out.push(node);
|
|
380
|
+
if (shift === 0)
|
|
381
|
+
return;
|
|
382
|
+
const count = nodeCount(arena, node);
|
|
383
|
+
for (let i = 0; i < count; i += 1) {
|
|
384
|
+
collectTrie(arena, childAt(arena, node, i), shift - BITS, out, budget);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
//# sourceMappingURL=vector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector.js","sourceRoot":"","sources":["../../src/vector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { SharedArena } from "./arena.js";
|
|
2
|
+
import { type VerifyModeValue } from "./layout.js";
|
|
3
|
+
import type { Slot } from "./values.js";
|
|
4
|
+
export declare function verifyMode(arena: SharedArena): VerifyModeValue;
|
|
5
|
+
/**
|
|
6
|
+
* The header checksum, over the root and the geometry.
|
|
7
|
+
*
|
|
8
|
+
* Deliberately not over the bump pointer or the statistics, which move independently of the
|
|
9
|
+
* root and would make every reader recompute for no reason.
|
|
10
|
+
*/
|
|
11
|
+
export declare function headerChecksum(arena: SharedArena, root: Slot, versionId: number): number;
|
|
12
|
+
/**
|
|
13
|
+
* A checksum over everything reachable from a root.
|
|
14
|
+
*
|
|
15
|
+
* Linear in the size of the structure, so it is a diagnostic mode rather than a production
|
|
16
|
+
* one. It catches corruption of a leaf value deep in the tree, which the header checksum
|
|
17
|
+
* cannot see at all.
|
|
18
|
+
*
|
|
19
|
+
* The walk is bounded by the same block header validation every decode uses, so a corrupted
|
|
20
|
+
* arena makes this throw rather than loop.
|
|
21
|
+
*/
|
|
22
|
+
export declare function deepChecksum(arena: SharedArena, root: Slot, budget?: number): number;
|
|
23
|
+
/** Owner side. Compute and publish the checksum for a version. */
|
|
24
|
+
export declare function publishChecksum(arena: SharedArena, root: Slot, versionId: number, mode: VerifyModeValue): void;
|
|
25
|
+
/**
|
|
26
|
+
* Reader side. Throw when the published checksum does not match the root it belongs to.
|
|
27
|
+
*
|
|
28
|
+
* The published checksum is a parameter rather than something this function loads, and that
|
|
29
|
+
* is not tidiness. It has to be read inside the seqlock window alongside the root and the
|
|
30
|
+
* version, or the writer can commit between the seqlock check and the checksum load, and the
|
|
31
|
+
* reader compares a checksum from one version against a root from another. That produced a
|
|
32
|
+
* steady trickle of false corruption reports under load, roughly fifty in eight hundred
|
|
33
|
+
* thousand reads, which is exactly the shape of bug that looks like flakiness.
|
|
34
|
+
*
|
|
35
|
+
* Called once per version rather than once per read.
|
|
36
|
+
*/
|
|
37
|
+
export declare function verifyRoot(arena: SharedArena, root: Slot, versionId: number, published: number): void;
|
|
38
|
+
//# sourceMappingURL=verify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/verify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAMvE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAwCxC,wBAAgB,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,eAAe,CAG9D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAmBxF;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,SAAY,GAAG,MAAM,CAkEvF;AAED,kEAAkE;AAClE,wBAAgB,eAAe,CAC7B,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,eAAe,GACpB,IAAI,CAQN;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,IAAI,CAeN"}
|