@dstanesc/o-o-o-o-o-o-o
Version:
O-O-O-O-O-O-O is a collection of content addressed persistent data structures
56 lines • 2.36 kB
JavaScript
async function traverseVertices(accessor, refs, visitor) {
const vertexTrace = new Set();
for (const ref of refs) {
await traverseVertex(accessor, ref, vertexTrace, visitor);
}
}
async function traverseEdges(accessor, refs, vertexTrace, visitor) {
for (const ref of refs) {
await traverseEdge(accessor, ref, vertexTrace, visitor);
}
}
async function traverseVertex(accessor, ref, vertexTrace, visitor) {
if (ref !== undefined) {
if (!vertexTrace.has(ref)) {
const vertex = await accessor.getVertex(ref);
if (visitor.startVertex !== undefined)
await visitor.startVertex(vertex);
if (vertex.nextEdge !== undefined)
await traverseEdge(accessor, vertex.nextEdge, vertexTrace, visitor);
if (visitor.startProp !== undefined &&
vertex.nextProp !== undefined)
await traverseProp(accessor, vertex.nextProp, visitor);
if (visitor.endVertex !== undefined)
await visitor.endVertex(vertex);
}
}
}
async function traverseEdge(accessor, ref, vertexTrace, visitor) {
if (ref !== undefined) {
const edge = await accessor.getEdge(ref);
if (visitor.startEdge !== undefined)
await visitor.startEdge(edge);
if (visitor.startProp !== undefined && edge.nextProp !== undefined)
await traverseProp(accessor, edge.nextProp, visitor);
if (edge.target !== undefined)
// true
await traverseVertex(accessor, edge.target, vertexTrace, visitor);
if (edge.sourceNext !== undefined)
await traverseEdge(accessor, edge.sourceNext, vertexTrace, visitor);
if (visitor.endEdge !== undefined)
await visitor.endEdge(edge);
}
}
async function traverseProp(accessor, ref, visitor) {
if (ref !== undefined) {
const prop = await accessor.getProp(ref);
if (visitor.startProp !== undefined)
await visitor.startProp(prop);
if (prop.nextProp !== undefined)
await traverseProp(accessor, prop.nextProp, visitor);
if (visitor.endProp !== undefined)
await visitor.endProp(prop);
}
}
export { traverseVertices, traverseEdges, traverseVertex, traverseEdge, traverseProp, };
//# sourceMappingURL=depth-first.js.map