ifc-expressions
Version:
Parsing and evaluation of IFC expressions
50 lines (49 loc) • 2.05 kB
JavaScript
import { Func } from "../Func.js";
import { ExprEvalSuccessObj } from "../../ExprEvalResult.js";
import { StringValue } from "../../../value/StringValue.js";
import { IfcDateTimeValue } from "../../../value/IfcDateTimeValue.js";
import { IfcTimeStampValue } from "../../../value/IfcTimeStampValue.js";
import { FuncArgIfcDateTime } from "../arg/FuncArgIfcDateTime.js";
import { FuncArgIfcDuration } from "../arg/FuncArgIfcDuration.js";
import { IfcDurationValue } from "../../../value/IfcDurationValue.js";
import { FuncArgUnion } from "../arg/FuncArgUnion.js";
import { FuncArgIfcTimeStamp } from "../arg/FuncArgIfcTimeStamp.js";
import { FuncArgIfcDurationString } from "../arg/FuncArgIfcDurationString.js";
export class ADDDURATION extends Func {
constructor() {
super("ADDDURATION", [
FuncArgUnion.of(true, "pointInTime", [
FuncArgIfcTimeStamp,
FuncArgIfcDateTime,
]),
FuncArgUnion.of(true, "duration", [
FuncArgIfcDuration,
FuncArgIfcDurationString,
]),
]);
}
calculateResult(callingExpr, evaluatedArguments) {
const durationArg = evaluatedArguments.get("duration");
var duration;
if (durationArg instanceof IfcDurationValue) {
duration = durationArg;
}
else if (durationArg instanceof StringValue) {
duration = IfcDurationValue.of(durationArg.getValue());
}
const pointInTime = evaluatedArguments.get("pointInTime");
if (pointInTime instanceof IfcDateTimeValue) {
return new ExprEvalSuccessObj(pointInTime.addDuration(duration));
}
else if (pointInTime instanceof IfcTimeStampValue) {
return new ExprEvalSuccessObj(pointInTime
.toIfcDateTimeValue()
.addDuration(duration)
.toIfcTimeStampValue());
}
}
getReturnType(argumentTypes) {
return argumentTypes[0];
}
}
//# sourceMappingURL=ADDDURATION.js.map