(&mut self, node: Node, dependencies_values: Vec<Value>)
| 644 | |
| 645 | impl Evaluator for SimpleEvaluator { |
| 646 | fn evaluate_node(&mut self, node: Node, dependencies_values: Vec<Value>) -> Result<Value> { |
| 647 | match node.get_operation() { |
| 648 | Operation::Input(_) | Operation::Call | Operation::Iterate => { |
| 649 | panic!("Should not be here!"); |
| 650 | } |
| 651 | Operation::Zeros(t) => Ok(Value::zero_of_type(t)), |
| 652 | Operation::Ones(t) => Ok(Value::one_of_type(t)?), |
| 653 | Operation::Add |
| 654 | | Operation::Subtract |
| 655 | | Operation::Multiply |
| 656 | | Operation::MixedMultiply => { |
| 657 | let dependencies = node.get_node_dependencies(); |
| 658 | let value0_rc = dependencies_values[0].clone(); |
| 659 | let value1_rc = dependencies_values[1].clone(); |
| 660 | let type0 = dependencies[0].get_type()?; |
| 661 | let type1 = dependencies[1].get_type()?; |
| 662 | let result_value = if node.get_operation() == Operation::MixedMultiply { |
| 663 | evaluate_mixed_multiply(type0, value0_rc, type1, value1_rc, node.get_type()?)? |
| 664 | } else { |
| 665 | evaluate_add_subtract_multiply( |
| 666 | type0, |
| 667 | value0_rc, |
| 668 | type1, |
| 669 | value1_rc, |
| 670 | node.get_operation(), |
| 671 | node.get_type()?, |
| 672 | )? |
| 673 | }; |
| 674 | Ok(result_value) |
| 675 | } |
| 676 | Operation::JoinWithColumnMasks(join_t, headers) => { |
| 677 | let dependencies = node.get_node_dependencies(); |
| 678 | let res_t = node.get_type()?; |
| 679 | |
| 680 | let set0 = TypedValue { |
| 681 | value: dependencies_values[0].clone(), |
| 682 | t: dependencies[0].get_type()?, |
| 683 | name: None, |
| 684 | }; |
| 685 | let set1 = TypedValue { |
| 686 | value: dependencies_values[1].clone(), |
| 687 | t: dependencies[1].get_type()?, |
| 688 | name: None, |
| 689 | }; |
| 690 | |
| 691 | evaluate_join(join_t, set0, set1, true, &headers, res_t) |
| 692 | } |
| 693 | Operation::Join(join_t, headers) => { |
| 694 | let dependencies = node.get_node_dependencies(); |
| 695 | let res_t = node.get_type()?; |
| 696 | |
| 697 | let set0 = TypedValue { |
| 698 | value: dependencies_values[0].clone(), |
| 699 | t: dependencies[0].get_type()?, |
| 700 | name: None, |
| 701 | }; |
| 702 | let set1 = TypedValue { |
| 703 | value: dependencies_values[1].clone(), |
no test coverage detected