use super::super::{BoolExpr, ColorExpr, Opcode, ScalarExpr, ValueKind, VisualError};
use super::VisualProgramBuilder;
impl VisualProgramBuilder {
pub fn less(&mut self, left: ScalarExpr, right: ScalarExpr) -> Result<BoolExpr, VisualError> {
self.binary(ValueKind::Bool, Opcode::Less, left.0, right.0)
.map(BoolExpr)
}
pub fn greater(
&mut self,
left: ScalarExpr,
right: ScalarExpr,
) -> Result<BoolExpr, VisualError> {
self.binary(ValueKind::Bool, Opcode::Greater, left.0, right.0)
.map(BoolExpr)
}
pub fn and(&mut self, left: BoolExpr, right: BoolExpr) -> Result<BoolExpr, VisualError> {
self.binary(ValueKind::Bool, Opcode::And, left.0, right.0)
.map(BoolExpr)
}
pub fn or(&mut self, left: BoolExpr, right: BoolExpr) -> Result<BoolExpr, VisualError> {
self.binary(ValueKind::Bool, Opcode::Or, left.0, right.0)
.map(BoolExpr)
}
pub fn not(&mut self, value: BoolExpr) -> Result<BoolExpr, VisualError> {
self.unary(ValueKind::Bool, Opcode::Not, value.0)
.map(BoolExpr)
}
pub fn select_scalar(
&mut self,
condition: BoolExpr,
when_true: ScalarExpr,
when_false: ScalarExpr,
) -> Result<ScalarExpr, VisualError> {
self.ternary(
ValueKind::Scalar,
Opcode::Select,
condition.0,
when_true.0,
when_false.0,
)
.map(ScalarExpr)
}
pub fn select_color(
&mut self,
condition: BoolExpr,
when_true: ColorExpr,
when_false: ColorExpr,
) -> Result<ColorExpr, VisualError> {
self.ternary(
ValueKind::Color,
Opcode::Select,
condition.0,
when_true.0,
when_false.0,
)
.map(ColorExpr)
}
}