@ifc-lite/data 1.14.4 → 1.14.5
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.
|
@@ -30,10 +30,24 @@ export interface RelationshipInfo {
|
|
|
30
30
|
type: RelationshipType;
|
|
31
31
|
typeName: string;
|
|
32
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* Structure-of-Arrays relationship graph builder.
|
|
35
|
+
* Uses parallel number arrays instead of object arrays to avoid millions of
|
|
36
|
+
* small object allocations. Build phase uses counting sort (O(n)) instead
|
|
37
|
+
* of comparison sort (O(n log n)) for massive speedup on large files.
|
|
38
|
+
*/
|
|
33
39
|
export declare class RelationshipGraphBuilder {
|
|
34
|
-
private
|
|
40
|
+
private _sources;
|
|
41
|
+
private _targets;
|
|
42
|
+
private _types;
|
|
43
|
+
private _relIds;
|
|
35
44
|
addEdge(source: number, target: number, type: RelationshipType, relId: number): void;
|
|
36
45
|
build(): RelationshipGraph;
|
|
37
|
-
|
|
46
|
+
/**
|
|
47
|
+
* Build CSR (Compressed Sparse Row) using counting sort.
|
|
48
|
+
* O(n) instead of O(n log n) — crucial for 12M+ edges.
|
|
49
|
+
*/
|
|
50
|
+
private buildCSR;
|
|
51
|
+
private emptyEdges;
|
|
38
52
|
}
|
|
39
53
|
//# sourceMappingURL=relationship-graph.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relationship-graph.d.ts","sourceRoot":"","sources":["../src/relationship-graph.ts"],"names":[],"mappings":"AAIA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,IAAI;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,gBAAgB,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,WAAW,CAAC;IACvB,UAAU,EAAE,WAAW,CAAC;IAExB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,gBAAgB,GAAG,IAAI,EAAE,CAAC;IAC5D,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAAC;IAChE,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;CACxC;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,OAAO,EAAE,iBAAiB,CAAC;IAE3B,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,EAAE,CAAC;IACpG,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC;IACzF,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAAC;CACjF;AAED,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,gBAAgB,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,wBAAwB;IACnC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"relationship-graph.d.ts","sourceRoot":"","sources":["../src/relationship-graph.ts"],"names":[],"mappings":"AAIA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,IAAI;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,gBAAgB,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,WAAW,CAAC;IACvB,UAAU,EAAE,WAAW,CAAC;IAExB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,gBAAgB,GAAG,IAAI,EAAE,CAAC;IAC5D,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAAC;IAChE,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;CACxC;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,OAAO,EAAE,iBAAiB,CAAC;IAE3B,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,EAAE,CAAC;IACpG,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC;IACzF,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAAC;CACjF;AAED,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,gBAAgB,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,OAAO,CAAgB;IAE/B,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAOpF,KAAK,IAAI,iBAAiB;IAqC1B;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAsFhB,OAAO,CAAC,UAAU;CAYnB"}
|
|
@@ -6,17 +6,29 @@
|
|
|
6
6
|
* Enables fast traversal in both directions
|
|
7
7
|
*/
|
|
8
8
|
import { RelationshipType } from './types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Structure-of-Arrays relationship graph builder.
|
|
11
|
+
* Uses parallel number arrays instead of object arrays to avoid millions of
|
|
12
|
+
* small object allocations. Build phase uses counting sort (O(n)) instead
|
|
13
|
+
* of comparison sort (O(n log n)) for massive speedup on large files.
|
|
14
|
+
*/
|
|
9
15
|
export class RelationshipGraphBuilder {
|
|
10
|
-
|
|
16
|
+
_sources = [];
|
|
17
|
+
_targets = [];
|
|
18
|
+
_types = [];
|
|
19
|
+
_relIds = [];
|
|
11
20
|
addEdge(source, target, type, relId) {
|
|
12
|
-
this.
|
|
21
|
+
this._sources.push(source);
|
|
22
|
+
this._targets.push(target);
|
|
23
|
+
this._types.push(type);
|
|
24
|
+
this._relIds.push(relId);
|
|
13
25
|
}
|
|
14
26
|
build() {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
const inverse = this.
|
|
27
|
+
const n = this._sources.length;
|
|
28
|
+
// Build forward CSR (sorted by source, value = target)
|
|
29
|
+
const forward = this.buildCSR(n, this._sources, this._targets, this._types, this._relIds);
|
|
30
|
+
// Build inverse CSR (sorted by target, value = source)
|
|
31
|
+
const inverse = this.buildCSR(n, this._targets, this._sources, this._types, this._relIds);
|
|
20
32
|
return {
|
|
21
33
|
forward,
|
|
22
34
|
inverse,
|
|
@@ -42,24 +54,49 @@ export class RelationshipGraphBuilder {
|
|
|
42
54
|
},
|
|
43
55
|
};
|
|
44
56
|
}
|
|
45
|
-
|
|
57
|
+
/**
|
|
58
|
+
* Build CSR (Compressed Sparse Row) using counting sort.
|
|
59
|
+
* O(n) instead of O(n log n) — crucial for 12M+ edges.
|
|
60
|
+
*/
|
|
61
|
+
buildCSR(n, keys, // sort key (source for forward, target for inverse)
|
|
62
|
+
values, // stored value (target for forward, source for inverse)
|
|
63
|
+
types, relIds) {
|
|
64
|
+
if (n === 0) {
|
|
65
|
+
return this.emptyEdges();
|
|
66
|
+
}
|
|
67
|
+
// Step 1: Count edges per key entity
|
|
68
|
+
const countMap = new Map();
|
|
69
|
+
for (let i = 0; i < n; i++) {
|
|
70
|
+
const k = keys[i];
|
|
71
|
+
countMap.set(k, (countMap.get(k) ?? 0) + 1);
|
|
72
|
+
}
|
|
73
|
+
// Step 2: Compute offsets (prefix sums)
|
|
46
74
|
const offsets = new Map();
|
|
47
75
|
const counts = new Map();
|
|
48
|
-
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
76
|
+
// Sort unique keys for deterministic CSR order
|
|
77
|
+
const uniqueKeys = Array.from(countMap.keys()).sort((a, b) => a - b);
|
|
78
|
+
let offset = 0;
|
|
79
|
+
for (const k of uniqueKeys) {
|
|
80
|
+
offsets.set(k, offset);
|
|
81
|
+
counts.set(k, countMap.get(k));
|
|
82
|
+
offset += countMap.get(k);
|
|
83
|
+
}
|
|
84
|
+
// Step 3: Place edges into sorted positions (counting sort scatter)
|
|
85
|
+
const edgeTargets = new Uint32Array(n);
|
|
86
|
+
const edgeTypes = new Uint16Array(n);
|
|
87
|
+
const edgeRelIds = new Uint32Array(n);
|
|
88
|
+
// Track current write position per key
|
|
89
|
+
const writePos = new Map();
|
|
90
|
+
for (const [k, o] of offsets) {
|
|
91
|
+
writePos.set(k, o);
|
|
92
|
+
}
|
|
93
|
+
for (let i = 0; i < n; i++) {
|
|
94
|
+
const k = keys[i];
|
|
95
|
+
const pos = writePos.get(k);
|
|
96
|
+
edgeTargets[pos] = values[i];
|
|
97
|
+
edgeTypes[pos] = types[i];
|
|
98
|
+
edgeRelIds[pos] = relIds[i];
|
|
99
|
+
writePos.set(k, pos + 1);
|
|
63
100
|
}
|
|
64
101
|
return {
|
|
65
102
|
offsets,
|
|
@@ -68,12 +105,12 @@ export class RelationshipGraphBuilder {
|
|
|
68
105
|
edgeTypes,
|
|
69
106
|
edgeRelIds,
|
|
70
107
|
getEdges(entityId, type) {
|
|
71
|
-
const
|
|
72
|
-
if (
|
|
108
|
+
const o = offsets.get(entityId);
|
|
109
|
+
if (o === undefined)
|
|
73
110
|
return [];
|
|
74
|
-
const
|
|
111
|
+
const c = counts.get(entityId);
|
|
75
112
|
const edges = [];
|
|
76
|
-
for (let i =
|
|
113
|
+
for (let i = o; i < o + c; i++) {
|
|
77
114
|
if (type === undefined || edgeTypes[i] === type) {
|
|
78
115
|
edges.push({
|
|
79
116
|
target: edgeTargets[i],
|
|
@@ -92,6 +129,18 @@ export class RelationshipGraphBuilder {
|
|
|
92
129
|
},
|
|
93
130
|
};
|
|
94
131
|
}
|
|
132
|
+
emptyEdges() {
|
|
133
|
+
return {
|
|
134
|
+
offsets: new Map(),
|
|
135
|
+
counts: new Map(),
|
|
136
|
+
edgeTargets: new Uint32Array(0),
|
|
137
|
+
edgeTypes: new Uint16Array(0),
|
|
138
|
+
edgeRelIds: new Uint32Array(0),
|
|
139
|
+
getEdges: () => [],
|
|
140
|
+
getTargets: () => [],
|
|
141
|
+
hasAnyEdges: () => false,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
95
144
|
}
|
|
96
145
|
function RelationshipTypeToString(type) {
|
|
97
146
|
const names = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relationship-graph.js","sourceRoot":"","sources":["../src/relationship-graph.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAmC9C,MAAM,OAAO,wBAAwB;IAC3B,
|
|
1
|
+
{"version":3,"file":"relationship-graph.js","sourceRoot":"","sources":["../src/relationship-graph.ts"],"names":[],"mappings":"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"}
|