UNPKG

ifc-expressions

Version:

Parsing and evaluation of IFC expressions

40 lines (39 loc) 1.98 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CompareMagnitudes = void 0; const Func_js_1 = require("../Func.js"); const FuncArgAny_js_1 = require("../arg/FuncArgAny.js"); const ExprEvalResult_js_1 = require("../../ExprEvalResult.js"); const Comparable_js_1 = require("../../../value/Comparable.js"); const ExprKind_js_1 = require("../../ExprKind.js"); const BooleanValue_js_1 = require("../../../value/BooleanValue.js"); const Types_js_1 = require("../../../type/Types.js"); class CompareMagnitudes extends Func_js_1.Func { constructor(name, cmp) { super(name, [ new FuncArgAny_js_1.FuncArgAny(true, CompareMagnitudes.KEY_LEFT), new FuncArgAny_js_1.FuncArgAny(true, CompareMagnitudes.KEY_RIGHT), ]); this.comparisonFunction = cmp; } calculateResult(callingExpr, evaluatedArguments) { const left = evaluatedArguments.get(CompareMagnitudes.KEY_LEFT); const right = evaluatedArguments.get(CompareMagnitudes.KEY_RIGHT); if (!(0, Comparable_js_1.isComparable)(left)) { return new ExprEvalResult_js_1.ExprEvalTypeErrorObj(ExprKind_js_1.ExprKind.FUNCTION, "Cannot compare: left value is not comparable", left, callingExpr.getTextSpan()); } if (!(0, Comparable_js_1.isComparable)(right)) { return new ExprEvalResult_js_1.ExprEvalTypeErrorObj(ExprKind_js_1.ExprKind.FUNCTION, "Cannot compare: right value is not comparable", right, callingExpr.getTextSpan()); } // @ts-ignore const cmpValue = this.comparisonFunction(left.compareTo(right)); return new ExprEvalResult_js_1.ExprEvalSuccessObj(BooleanValue_js_1.BooleanValue.of(cmpValue)); } getReturnType(argumentTypes) { return Types_js_1.Type.BOOLEAN; } } exports.CompareMagnitudes = CompareMagnitudes; CompareMagnitudes.KEY_LEFT = "left"; CompareMagnitudes.KEY_RIGHT = "right"; //# sourceMappingURL=CompareMagnitudes.js.map