UNPKG

@hlang-org/runtime

Version:

A FBP-Inspired language for universal applications.

121 lines 13.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Edge = exports.Vertex = void 0; const _ = (k) => String(k.id); class Graph { constructor(directed) { // digraph or undigraph this.directed = typeof directed === 'undefined' || Boolean(directed); // Map<Vertex> this.vertices = new Map(); // Matrix<{src: Port, dest: Port}> Adjacency matrix this.adjList = new Matrix(); // Matrix<boolean> Join matrix cache this.connectedMatrix = new Matrix(); } addVertex(v) { const vk = _(v.data); if (this.vertices.has(vk)) return; this.vertices.set(vk, v); this.adjList.setRow(vk); } addEdge(e) { const { v1, v2, data } = e; const v1k = _(v1.data); const v2k = _(v2.data); if (!this.vertices.has(v1k)) this.vertices.set(v1k, v1); if (!this.vertices.has(v2k)) this.vertices.set(v2k, v2); this.adjList.set(v1k, v2k, data); if (!this.directed) { this.adjList.set(v2k, v1k, data); } } // digraph hasDest(from, to, visited = new Set()) { if (visited.has(from)) return false; visited.add(from); if (this.connectedMatrix.get(from, to)) return true; if (!this.adjList.getRow(from)) return false; if (this.adjList.get(from, to)) { this.connectedMatrix.set(from, to, true); return true; } for (const dest of this.adjList.cols(from)) { if (this.connectedMatrix.get(dest, to)) { this.connectedMatrix.set(from, to, true); return true; } if (this.hasDest(dest, to, new Set([...visited]))) return true; } return false; } isCircled(prev, next) { const pk = _(prev); const nk = _(next); if (pk === nk) return true; return this.hasDest(nk, pk); } } exports.default = Graph; class Vertex { constructor(data) { this.data = data; this.visited = false; } } exports.Vertex = Vertex; class Edge { constructor(v1, v2, data) { this.data = data; this.v1 = new Vertex(v1); this.v2 = new Vertex(v2); } } exports.Edge = Edge; class Matrix { constructor() { this.matrix = new Map(); return this; } setRow(row) { if (!this.matrix.has(row)) { this.matrix.set(row, new Map()); } return this.matrix.get(row); } getRow(row) { if (!this.matrix.has(row)) return null; return this.matrix.get(row); } set(row, col, v) { this.setRow(row); this.matrix.get(row).set(col, v); } get(row, col) { if (!this.matrix.has(row)) return null; return this.matrix.get(row).get(col); } cols(row) { if (!this.matrix) return []; if (!this.matrix.has(row)) return []; return Array.from(this.matrix.get(row).keys()); } rows() { if (!this.matrix) return []; return Array.from(this.matrix.keys()); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29yZS9ncmFwaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBVSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUV0QyxNQUFxQixLQUFLO0lBTXhCLFlBQVksUUFBaUI7UUFDM0IsdUJBQXVCO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxRQUFRLEtBQUssV0FBVyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyRSxjQUFjO1FBQ2QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQzFCLG1EQUFtRDtRQUNuRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksTUFBTSxFQUFFLENBQUM7UUFDNUIsb0NBQW9DO1FBQ3BDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsU0FBUyxDQUFDLENBQVk7UUFDcEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVyQixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUFFLE9BQU87UUFFbEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXpCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxPQUFPLENBQUMsQ0FBYTtRQUNuQixNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFM0IsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2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QVc7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRXZDLE9BQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFvQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsSUFBSSxDQUFDLEdBQUc7UUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFFckMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBb0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRCxJQUFJO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFFNUIsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN4QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBfID0gKGspOiBzdHJpbmcgPT4gU3RyaW5nKGsuaWQpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHcmFwaDxULCBLPiB7XG4gIGRpcmVjdGVkOiBib29sZWFuO1xuICB2ZXJ0aWNlczogTWFwPHN0cmluZywgVmVydGV4PEs+PjtcbiAgYWRqTGlzdDogTWF0cml4PFQ+O1xuICBjb25uZWN0ZWRNYXRyaXg6IE1hdHJpeDxib29sZWFuPjtcblxuICBjb25zdHJ1Y3RvcihkaXJlY3RlZDogYm9vbGVhbikge1xuICAgIC8vIGRpZ3JhcGggb3IgdW5kaWdyYXBoXG4gICAgdGhpcy5kaXJlY3RlZCA9IHR5cGVvZiBkaXJlY3RlZCA9PT0gJ3VuZGVmaW5lZCcgfHwgQm9vbGVhbihkaXJlY3RlZCk7XG4gICAgLy8gTWFwPFZlcnRleD5cbiAgICB0aGlzLnZlcnRpY2VzID0gbmV3IE1hcCgpO1xuICAgIC8vIE1hdHJpeDx7c3JjOiBQb3J0LCBkZXN0OiBQb3J0fT4gQWRqYWNlbmN5IG1hdHJpeFxuICAgIHRoaXMuYWRqTGlzdCA9IG5ldyBNYXRyaXgoKTtcbiAgICAvLyBNYXRyaXg8Ym9vbGVhbj4gSm9pbiBtYXRyaXggY2FjaGVcbiAgICB0aGlzLmNvbm5lY3RlZE1hdHJpeCA9IG5ldyBNYXRyaXgoKTtcbiAgfVxuXG4gIGFkZFZlcnRleCh2OiBWZXJ0ZXg8Sz4pIHtcbiAgICBjb25zdCB2ayA9IF8odi5kYXRhKTtcblxuICAgIGlmICh0aGlzLnZlcnRpY2VzLmhhcyh2aykpIHJldHVybjtcblxuICAgIHRoaXMudmVydGljZXMuc2V0KHZrLCB2KTtcblxuICAgIHRoaXMuYWRqTGlzdC5zZXRSb3codmspO1xuICB9XG5cbiAgYWRkRWRnZShlOiBFZGdlPFQsIEs+KSB7XG4gICAgY29uc3QgeyB2MSwgdjIsIGRhdGEgfSA9IGU7XG5cbiAgICBjb25zdCB2MWsgPSBfKHYxLmRhdGEpO1xuICAgIGNvbnN0IHYyayA9IF8odjIuZGF0YSk7XG5cbiAgICBpZiAoIXRoaXMudmVydGljZXMuaGFzKHYxaykpIHRoaXMudmVydGljZXMuc2V0KHYxaywgdjEpO1xuICAgIGlmICghdGhpcy52ZXJ0aWNlcy5oYXModjJrKSkgdGhpcy52ZXJ0aWNlcy5zZXQodjJrLCB2Mik7XG5cbiAgICB0aGlzLmFkakxpc3Quc2V0KHYxaywgdjJrLCBkYXRhKTtcblxuICAgIGlmICghdGhpcy5kaXJlY3RlZCkge1xuICAgICAgdGhpcy5hZGpMaXN0LnNldCh2MmssIHYxaywgZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZGlncmFwaFxuICBoYXNEZXN0KGZyb206IHN0cmluZywgdG86IHN0cmluZywgdmlzaXRlZDogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCkpIHtcbiAgICBpZiAodmlzaXRlZC5oYXMoZnJvbSkpIHJldHVybiBmYWxzZTtcbiAgICB2aXNpdGVkLmFkZChmcm9tKTtcblxuICAgIGlmICh0aGlzLmNvbm5lY3RlZE1hdHJpeC5nZXQoZnJvbSwgdG8pKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoIXRoaXMuYWRqTGlzdC5nZXRSb3coZnJvbSkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodGhpcy5hZGpMaXN0LmdldChmcm9tLCB0bykpIHtcbiAgICAgIHRoaXMuY29ubmVjdGVkTWF0cml4LnNldChmcm9tLCB0bywgdHJ1ZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBkZXN0IG9mIHRoaXMuYWRqTGlzdC5jb2xzKGZyb20pKSB7XG4gICAgICBpZiAodGhpcy5jb25uZWN0ZWRNYXRyaXguZ2V0KGRlc3QsIHRvKSkge1xuICAgICAgICB0aGlzLmNvbm5lY3RlZE1hdHJpeC5zZXQoZnJvbSwgdG8sIHRydWUpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmhhc0Rlc3QoZGVzdCwgdG8sIG5ldyBTZXQoWy4uLnZpc2l0ZWRdKSkpIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlzQ2lyY2xlZChwcmV2OiBULCBuZXh0OiBUKSB7XG4gICAgY29uc3QgcGsgPSBfKHByZXYpO1xuICAgIGNvbnN0IG5rID0gXyhuZXh0KTtcbiAgICBpZiAocGsgPT09IG5rKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5oYXNEZXN0KG5rLCBwayk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFZlcnRleDxUPiB7XG4gIGRhdGE6IFQ7XG4gIHZpc2l0ZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoZGF0YTogVCkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy52aXNpdGVkID0gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVkZ2U8VCwgSz4gIHtcbiAgZGF0YTogVDtcbiAgdjE6IFZlcnRleDxLPjtcbiAgdjI6IFZlcnRleDxLPjtcblxuICBjb25zdHJ1Y3Rvcih2MTogSywgdjI6IEssIGRhdGE6IFQpIHtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMudjEgPSBuZXcgVmVydGV4PEs+KHYxKTtcbiAgICB0aGlzLnYyID0gbmV3IFZlcnRleDxLPih2Mik7XG4gIH1cbn1cblxuY2xhc3MgTWF0cml4PFQ+IHtcbiAgbWF0cml4OiBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBUPj47XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5tYXRyaXggPSBuZXcgTWFwKCk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNldFJvdyhyb3c6IHN0cmluZykge1xuICAgIGlmICghdGhpcy5tYXRyaXguaGFzKHJvdykpIHtcbiAgICAgIHRoaXMubWF0cml4LnNldChyb3csIG5ldyBNYXAoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubWF0cml4LmdldChyb3cpO1xuICB9XG5cbiAgZ2V0Um93KHJvdzogc3RyaW5nKTogTWFwPHN0cmluZywgVD4gfCBudWxsIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMubWF0cml4Lmhhcyhyb3cpKSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLm1hdHJpeC5nZXQocm93KTtcbiAgfVxuXG4gIHNldChyb3c6IHN0cmluZywgY29sOiBzdHJpbmcsIHY6IFQpIHtcbiAgICB0aGlzLnNldFJvdyhyb3cpO1xuXG4gICAgKHRoaXMubWF0cml4LmdldChyb3cpIGFzIE1hcDxzdHJpbmcsIFQ+KS5zZXQoY29sLCB2KTtcbiAgfVxuXG4gIGdldChyb3c6IHN0cmluZywgY29sOiBzdHJpbmcpOiBUIHwgbnVsbCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLm1hdHJpeC5oYXMocm93KSkgcmV0dXJuIG51bGw7XG5cbiAgICByZXR1cm4gKHRoaXMubWF0cml4LmdldChyb3cpIGFzIE1hcDxzdHJpbmcsIFQ+KS5nZXQoY29sKTtcbiAgfVxuXG4gIGNvbHMocm93KTogc3RyaW5nW10ge1xuICAgIGlmICghdGhpcy5tYXRyaXgpIHJldHVybiBbXTtcbiAgICBpZiAoIXRoaXMubWF0cml4Lmhhcyhyb3cpKSByZXR1cm4gW107XG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbSgodGhpcy5tYXRyaXguZ2V0KHJvdykgYXMgTWFwPHN0cmluZywgVD4pLmtleXMoKSk7XG4gIH1cblxuICByb3dzKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIXRoaXMubWF0cml4KSByZXR1cm4gW107XG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLm1hdHJpeC5rZXlzKCkpO1xuICB9XG59XG4iXX0=