/
AndOutlet.ts
53 lines (47 loc) · 1.63 KB
/
AndOutlet.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
// Copyright 2015-2019 SWIM.AI inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import {Value} from "@swim/structure";
import {Inlet, AbstractOutlet, OutletInlet} from "@swim/streamlet";
export class AndOutlet extends AbstractOutlet<Value> {
/** @hidden */
readonly _operand1Inlet: Inlet<Value>;
/** @hidden */
readonly _operand2Inlet: Inlet<Value>;
constructor() {
super();
this._operand1Inlet = new OutletInlet<Value>(this);
this._operand2Inlet = new OutletInlet<Value>(this);
}
operand1Inlet(): Inlet<Value> {
return this._operand1Inlet;
}
operand2Inlet(): Inlet<Value> {
return this._operand2Inlet;
}
get(): Value {
const operand1Input = this._operand1Inlet.input();
const argument1 = operand1Input !== null ? operand1Input.get() : void 0;
if (argument1 !== void 0) {
if (argument1.booleanValue(false)) {
const operand2Input = this._operand2Inlet.input();
const argument2 = operand2Input !== null ? operand2Input.get() : void 0;
if (argument2 !== void 0) {
return argument2;
}
}
return argument1;
}
return Value.absent();
}
}