38 lines
1.1 KiB
TypeScript
Raw Normal View History

2020-05-17 09:48:24 +02:00
"use strict";
import NoteSet = require('../note_set');
import SearchContext = require('../search_context');
import Expression = require('./expression');
import TrueExp = require('./true');
2020-05-22 09:38:30 +02:00
class AndExp extends Expression {
private subExpressions: Expression[];
static of(_subExpressions: (Expression | null | undefined)[]) {
const subExpressions = _subExpressions.filter((exp) => !!exp) as Expression[];
2020-05-20 23:20:39 +02:00
2020-05-19 00:00:35 +02:00
if (subExpressions.length === 1) {
return subExpressions[0];
2020-05-20 23:20:39 +02:00
} else if (subExpressions.length > 0) {
2020-05-19 00:00:35 +02:00
return new AndExp(subExpressions);
} else {
return new TrueExp();
2020-05-19 00:00:35 +02:00
}
}
constructor(subExpressions: Expression[]) {
2020-05-22 09:38:30 +02:00
super();
2020-05-20 23:20:39 +02:00
this.subExpressions = subExpressions;
}
execute(inputNoteSet: NoteSet, executionContext: {}, searchContext: SearchContext) {
2020-05-16 23:12:29 +02:00
for (const subExpression of this.subExpressions) {
inputNoteSet = subExpression.execute(inputNoteSet, executionContext, searchContext);
2020-05-16 23:12:29 +02:00
}
return inputNoteSet;
2020-05-16 23:12:29 +02:00
}
}
2020-05-17 09:48:24 +02:00
export = AndExp;