UNPKG

itclocks

Version:

An implementation of Interval Tree Clocks in TypeScript

61 lines (60 loc) 2.65 kB
"use strict"; /** * Copyright (C) 2017 Gabriel Batista Galli * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ Object.defineProperty(exports, "__esModule", { value: true }); const Occurrences_1 = require("./Occurrences"); class Filler { static fill(id, occurrence) { if (id.isLeaf()) return Filler.fillWithLeafID(id, occurrence); if (occurrence.isLeaf()) return occurrence; return Filler.fillNonLeafs(id, occurrence); } static fillWithLeafID(leafID, occurrence) { if (leafID.isZero()) return occurrence; return Occurrences_1.Occurrences.with(occurrence.max()); } static fillNonLeafs(id, occurrence) { if (id.left.isOne()) return Filler.fillLeftOneID(id, occurrence); if (id.right.isOne()) return Filler.fillRightOneID(id, occurrence); return Filler.fillLeftRight(id, occurrence); } static fillLeftOneID(id, occurrence) { let filledRight = Filler.fillRight(id, occurrence); let max = Math.max(occurrence.left.max(), filledRight.min()); return Occurrences_1.Occurrences.with(occurrence.value, Occurrences_1.Occurrences.with(max), filledRight).normalize(); } static fillRight(id, occurrence) { return Filler.fill(id.right, occurrence.right); } static fillRightOneID(id, occurrence) { let filledLeft = Filler.fillLeft(id, occurrence); let max = Math.max(occurrence.right.max(), filledLeft.min()); return Occurrences_1.Occurrences.with(occurrence.value, filledLeft, Occurrences_1.Occurrences.with(max)).normalize(); } static fillLeft(id, occurrence) { return Filler.fill(id.left, occurrence.left); } static fillLeftRight(id, occurrence) { return Occurrences_1.Occurrences.with(occurrence.value, Filler.fillLeft(id, occurrence), Filler.fillRight(id, occurrence)).normalize(); } } exports.Filler = Filler;