|
1 | | -use crate::machine::{ |
2 | | - cost_model::{ |
3 | | - cost_map::CostMap, |
4 | | - costing::{ |
5 | | - Cost, OneArgumentCosting, SixArgumentsCosting, ThreeArgumentsCosting, |
6 | | - TwoArgumentsCosting, |
| 1 | +use crate::{ |
| 2 | + builtin::DefaultFunction, |
| 3 | + machine::{ |
| 4 | + cost_model::{ |
| 5 | + builtin_costs::BuiltinCostModel, |
| 6 | + cost_map::CostMap, |
| 7 | + costing::{ |
| 8 | + Cost, OneArgumentCosting, SixArgumentsCosting, ThreeArgumentsCosting, |
| 9 | + TwoArgumentsCosting, |
| 10 | + }, |
7 | 11 | }, |
| 12 | + ExBudget, |
8 | 13 | }, |
9 | | - ExBudget, |
10 | 14 | }; |
11 | 15 |
|
12 | 16 | #[derive(Debug, PartialEq)] |
@@ -74,8 +78,8 @@ pub struct BuiltinCostsV1 { |
74 | 78 | mk_nil_pair_data: OneArgumentCosting, |
75 | 79 | } |
76 | 80 |
|
77 | | -impl BuiltinCostsV1 { |
78 | | - pub fn default() -> Self { |
| 81 | +impl BuiltinCostModel for BuiltinCostsV1 { |
| 82 | + fn default() -> Self { |
79 | 83 | Self { |
80 | 84 | add_integer: TwoArgumentsCosting::new( |
81 | 85 | TwoArgumentsCosting::max_size(1, 1), |
@@ -283,7 +287,7 @@ impl BuiltinCostsV1 { |
283 | 287 | ), |
284 | 288 | } |
285 | 289 | } |
286 | | - pub fn initialize_builtin_costs(cost_map: &CostMap) -> Self { |
| 290 | + fn initialize(cost_map: &CostMap) -> Self { |
287 | 291 | Self { |
288 | 292 | add_integer: TwoArgumentsCosting::new( |
289 | 293 | TwoArgumentsCosting::max_size( |
@@ -625,224 +629,222 @@ impl BuiltinCostsV1 { |
625 | 629 | ), |
626 | 630 | } |
627 | 631 | } |
628 | | -} |
629 | 632 |
|
630 | | -impl BuiltinCostsV1 { |
631 | | - pub fn get_cost(&self, builtin: &str, args: &[i64]) -> Option<ExBudget> { |
| 633 | + fn get_cost(&self, builtin: DefaultFunction, args: &[i64]) -> Option<ExBudget> { |
632 | 634 | match builtin { |
633 | | - "add_integer" => Some(ExBudget::new( |
| 635 | + DefaultFunction::AddInteger => Some(ExBudget::new( |
634 | 636 | self.add_integer.mem.cost([args[0], args[1]]), |
635 | 637 | self.add_integer.cpu.cost([args[0], args[1]]), |
636 | 638 | )), |
637 | | - "subtract_integer" => Some(ExBudget::new( |
| 639 | + DefaultFunction::SubtractInteger => Some(ExBudget::new( |
638 | 640 | self.subtract_integer.mem.cost([args[0], args[1]]), |
639 | 641 | self.subtract_integer.cpu.cost([args[0], args[1]]), |
640 | 642 | )), |
641 | | - "multiply_integer" => Some(ExBudget::new( |
| 643 | + DefaultFunction::MultiplyInteger => Some(ExBudget::new( |
642 | 644 | self.multiply_integer.mem.cost([args[0], args[1]]), |
643 | 645 | self.multiply_integer.cpu.cost([args[0], args[1]]), |
644 | 646 | )), |
645 | | - "divide_integer" => Some(ExBudget::new( |
| 647 | + DefaultFunction::DivideInteger => Some(ExBudget::new( |
646 | 648 | self.divide_integer.mem.cost([args[0], args[1]]), |
647 | 649 | self.divide_integer.cpu.cost([args[0], args[1]]), |
648 | 650 | )), |
649 | | - "quotient_integer" => Some(ExBudget::new( |
| 651 | + DefaultFunction::QuotientInteger => Some(ExBudget::new( |
650 | 652 | self.quotient_integer.mem.cost([args[0], args[1]]), |
651 | 653 | self.quotient_integer.cpu.cost([args[0], args[1]]), |
652 | 654 | )), |
653 | | - "remainder_integer" => Some(ExBudget::new( |
| 655 | + DefaultFunction::RemainderInteger => Some(ExBudget::new( |
654 | 656 | self.remainder_integer.mem.cost([args[0], args[1]]), |
655 | 657 | self.remainder_integer.cpu.cost([args[0], args[1]]), |
656 | 658 | )), |
657 | | - "mod_integer" => Some(ExBudget::new( |
| 659 | + DefaultFunction::ModInteger => Some(ExBudget::new( |
658 | 660 | self.mod_integer.mem.cost([args[0], args[1]]), |
659 | 661 | self.mod_integer.cpu.cost([args[0], args[1]]), |
660 | 662 | )), |
661 | | - "equals_integer" => Some(ExBudget::new( |
| 663 | + DefaultFunction::EqualsInteger => Some(ExBudget::new( |
662 | 664 | self.equals_integer.mem.cost([args[0], args[1]]), |
663 | 665 | self.equals_integer.cpu.cost([args[0], args[1]]), |
664 | 666 | )), |
665 | | - "less_than_integer" => Some(ExBudget::new( |
| 667 | + DefaultFunction::LessThanInteger => Some(ExBudget::new( |
666 | 668 | self.less_than_integer.mem.cost([args[0], args[1]]), |
667 | 669 | self.less_than_integer.cpu.cost([args[0], args[1]]), |
668 | 670 | )), |
669 | | - "less_than_equals_integer" => Some(ExBudget::new( |
| 671 | + DefaultFunction::LessThanEqualsInteger => Some(ExBudget::new( |
670 | 672 | self.less_than_equals_integer.mem.cost([args[0], args[1]]), |
671 | 673 | self.less_than_equals_integer.cpu.cost([args[0], args[1]]), |
672 | 674 | )), |
673 | | - "append_byte_string" => Some(ExBudget::new( |
| 675 | + DefaultFunction::AppendByteString => Some(ExBudget::new( |
674 | 676 | self.append_byte_string.mem.cost([args[0], args[1]]), |
675 | 677 | self.append_byte_string.cpu.cost([args[0], args[1]]), |
676 | 678 | )), |
677 | | - "cons_byte_string" => Some(ExBudget::new( |
| 679 | + DefaultFunction::ConsByteString => Some(ExBudget::new( |
678 | 680 | self.cons_byte_string.mem.cost([args[0], args[1]]), |
679 | 681 | self.cons_byte_string.cpu.cost([args[0], args[1]]), |
680 | 682 | )), |
681 | | - "slice_byte_string" => Some(ExBudget::new( |
| 683 | + DefaultFunction::SliceByteString => Some(ExBudget::new( |
682 | 684 | self.slice_byte_string.mem.cost([args[0], args[1], args[2]]), |
683 | 685 | self.slice_byte_string.cpu.cost([args[0], args[1], args[2]]), |
684 | 686 | )), |
685 | | - "length_of_byte_string" => Some(ExBudget::new( |
| 687 | + DefaultFunction::LengthOfByteString => Some(ExBudget::new( |
686 | 688 | self.length_of_byte_string.mem.cost([args[0]]), |
687 | 689 | self.length_of_byte_string.cpu.cost([args[0]]), |
688 | 690 | )), |
689 | | - "index_byte_string" => Some(ExBudget::new( |
| 691 | + DefaultFunction::IndexByteString => Some(ExBudget::new( |
690 | 692 | self.index_byte_string.mem.cost([args[0], args[1]]), |
691 | 693 | self.index_byte_string.cpu.cost([args[0], args[1]]), |
692 | 694 | )), |
693 | | - "equals_byte_string" => Some(ExBudget::new( |
| 695 | + DefaultFunction::EqualsByteString => Some(ExBudget::new( |
694 | 696 | self.equals_byte_string.mem.cost([args[0], args[1]]), |
695 | 697 | self.equals_byte_string.cpu.cost([args[0], args[1]]), |
696 | 698 | )), |
697 | | - "less_than_byte_string" => Some(ExBudget::new( |
| 699 | + DefaultFunction::LessThanByteString => Some(ExBudget::new( |
698 | 700 | self.less_than_byte_string.mem.cost([args[0], args[1]]), |
699 | 701 | self.less_than_byte_string.cpu.cost([args[0], args[1]]), |
700 | 702 | )), |
701 | | - "less_than_equals_byte_string" => Some(ExBudget::new( |
| 703 | + DefaultFunction::LessThanEqualsByteString => Some(ExBudget::new( |
702 | 704 | self.less_than_equals_byte_string |
703 | 705 | .mem |
704 | 706 | .cost([args[0], args[1]]), |
705 | 707 | self.less_than_equals_byte_string |
706 | 708 | .cpu |
707 | 709 | .cost([args[0], args[1]]), |
708 | 710 | )), |
709 | | - "sha2_256" => Some(ExBudget::new( |
| 711 | + DefaultFunction::Sha2_256 => Some(ExBudget::new( |
710 | 712 | self.sha2_256.mem.cost([args[0]]), |
711 | 713 | self.sha2_256.cpu.cost([args[0]]), |
712 | 714 | )), |
713 | | - "sha3_256" => Some(ExBudget::new( |
| 715 | + DefaultFunction::Sha3_256 => Some(ExBudget::new( |
714 | 716 | self.sha3_256.mem.cost([args[0]]), |
715 | 717 | self.sha3_256.cpu.cost([args[0]]), |
716 | 718 | )), |
717 | | - "blake2b_256" => Some(ExBudget::new( |
| 719 | + DefaultFunction::Blake2b_256 => Some(ExBudget::new( |
718 | 720 | self.blake2b_256.mem.cost([args[0]]), |
719 | 721 | self.blake2b_256.cpu.cost([args[0]]), |
720 | 722 | )), |
721 | | - "verify_ed25519_signature" => Some(ExBudget::new( |
| 723 | + DefaultFunction::VerifyEd25519Signature => Some(ExBudget::new( |
722 | 724 | self.verify_ed25519_signature |
723 | 725 | .mem |
724 | 726 | .cost([args[0], args[1], args[2]]), |
725 | 727 | self.verify_ed25519_signature |
726 | 728 | .cpu |
727 | 729 | .cost([args[0], args[1], args[2]]), |
728 | 730 | )), |
729 | | - "append_string" => Some(ExBudget::new( |
| 731 | + DefaultFunction::AppendString => Some(ExBudget::new( |
730 | 732 | self.append_string.mem.cost([args[0], args[1]]), |
731 | 733 | self.append_string.cpu.cost([args[0], args[1]]), |
732 | 734 | )), |
733 | | - "equals_string" => Some(ExBudget::new( |
| 735 | + DefaultFunction::EqualsString => Some(ExBudget::new( |
734 | 736 | self.equals_string.mem.cost([args[0], args[1]]), |
735 | 737 | self.equals_string.cpu.cost([args[0], args[1]]), |
736 | 738 | )), |
737 | | - "encode_utf8" => Some(ExBudget::new( |
| 739 | + DefaultFunction::EncodeUtf8 => Some(ExBudget::new( |
738 | 740 | self.encode_utf8.mem.cost([args[0]]), |
739 | 741 | self.encode_utf8.cpu.cost([args[0]]), |
740 | 742 | )), |
741 | | - "decode_utf8" => Some(ExBudget::new( |
| 743 | + DefaultFunction::DecodeUtf8 => Some(ExBudget::new( |
742 | 744 | self.decode_utf8.mem.cost([args[0]]), |
743 | 745 | self.decode_utf8.cpu.cost([args[0]]), |
744 | 746 | )), |
745 | | - "if_then_else" => Some(ExBudget::new( |
| 747 | + DefaultFunction::IfThenElse => Some(ExBudget::new( |
746 | 748 | self.if_then_else.mem.cost([args[0], args[1], args[2]]), |
747 | 749 | self.if_then_else.cpu.cost([args[0], args[1], args[2]]), |
748 | 750 | )), |
749 | | - "choose_unit" => Some(ExBudget::new( |
| 751 | + DefaultFunction::ChooseUnit => Some(ExBudget::new( |
750 | 752 | self.choose_unit.mem.cost([args[0], args[1]]), |
751 | 753 | self.choose_unit.cpu.cost([args[0], args[1]]), |
752 | 754 | )), |
753 | | - "trace" => Some(ExBudget::new( |
| 755 | + DefaultFunction::Trace => Some(ExBudget::new( |
754 | 756 | self.trace.mem.cost([args[0], args[1]]), |
755 | 757 | self.trace.cpu.cost([args[0], args[1]]), |
756 | 758 | )), |
757 | | - "fst_pair" => Some(ExBudget::new( |
| 759 | + DefaultFunction::FstPair => Some(ExBudget::new( |
758 | 760 | self.fst_pair.mem.cost([args[0]]), |
759 | 761 | self.fst_pair.cpu.cost([args[0]]), |
760 | 762 | )), |
761 | | - "snd_pair" => Some(ExBudget::new( |
| 763 | + DefaultFunction::SndPair => Some(ExBudget::new( |
762 | 764 | self.snd_pair.mem.cost([args[0]]), |
763 | 765 | self.snd_pair.cpu.cost([args[0]]), |
764 | 766 | )), |
765 | | - "choose_list" => Some(ExBudget::new( |
| 767 | + DefaultFunction::ChooseList => Some(ExBudget::new( |
766 | 768 | self.choose_list.mem.cost([args[0], args[1], args[2]]), |
767 | 769 | self.choose_list.cpu.cost([args[0], args[1], args[2]]), |
768 | 770 | )), |
769 | | - "mk_cons" => Some(ExBudget::new( |
| 771 | + DefaultFunction::MkCons => Some(ExBudget::new( |
770 | 772 | self.mk_cons.mem.cost([args[0], args[1]]), |
771 | 773 | self.mk_cons.cpu.cost([args[0], args[1]]), |
772 | 774 | )), |
773 | | - "head_list" => Some(ExBudget::new( |
| 775 | + DefaultFunction::HeadList => Some(ExBudget::new( |
774 | 776 | self.head_list.mem.cost([args[0]]), |
775 | 777 | self.head_list.cpu.cost([args[0]]), |
776 | 778 | )), |
777 | | - "tail_list" => Some(ExBudget::new( |
| 779 | + DefaultFunction::TailList => Some(ExBudget::new( |
778 | 780 | self.tail_list.mem.cost([args[0]]), |
779 | 781 | self.tail_list.cpu.cost([args[0]]), |
780 | 782 | )), |
781 | | - "null_list" => Some(ExBudget::new( |
| 783 | + DefaultFunction::NullList => Some(ExBudget::new( |
782 | 784 | self.null_list.mem.cost([args[0]]), |
783 | 785 | self.null_list.cpu.cost([args[0]]), |
784 | 786 | )), |
785 | | - "choose_data" => Some(ExBudget::new( |
| 787 | + DefaultFunction::ChooseData => Some(ExBudget::new( |
786 | 788 | self.choose_data |
787 | 789 | .mem |
788 | 790 | .cost([args[0], args[1], args[2], args[3], args[4], args[5]]), |
789 | 791 | self.choose_data |
790 | 792 | .cpu |
791 | 793 | .cost([args[0], args[1], args[2], args[3], args[4], args[5]]), |
792 | 794 | )), |
793 | | - "constr_data" => Some(ExBudget::new( |
| 795 | + DefaultFunction::ConstrData => Some(ExBudget::new( |
794 | 796 | self.constr_data.mem.cost([args[0], args[1]]), |
795 | 797 | self.constr_data.cpu.cost([args[0], args[1]]), |
796 | 798 | )), |
797 | | - "map_data" => Some(ExBudget::new( |
| 799 | + DefaultFunction::MapData => Some(ExBudget::new( |
798 | 800 | self.map_data.mem.cost([args[0]]), |
799 | 801 | self.map_data.cpu.cost([args[0]]), |
800 | 802 | )), |
801 | | - "list_data" => Some(ExBudget::new( |
| 803 | + DefaultFunction::ListData => Some(ExBudget::new( |
802 | 804 | self.list_data.mem.cost([args[0]]), |
803 | 805 | self.list_data.cpu.cost([args[0]]), |
804 | 806 | )), |
805 | | - "i_data" => Some(ExBudget::new( |
| 807 | + DefaultFunction::IData => Some(ExBudget::new( |
806 | 808 | self.i_data.mem.cost([args[0]]), |
807 | 809 | self.i_data.cpu.cost([args[0]]), |
808 | 810 | )), |
809 | | - "b_data" => Some(ExBudget::new( |
| 811 | + DefaultFunction::BData => Some(ExBudget::new( |
810 | 812 | self.b_data.mem.cost([args[0]]), |
811 | 813 | self.b_data.cpu.cost([args[0]]), |
812 | 814 | )), |
813 | | - "un_constr_data" => Some(ExBudget::new( |
| 815 | + DefaultFunction::UnConstrData => Some(ExBudget::new( |
814 | 816 | self.un_constr_data.mem.cost([args[0]]), |
815 | 817 | self.un_constr_data.cpu.cost([args[0]]), |
816 | 818 | )), |
817 | | - "un_map_data" => Some(ExBudget::new( |
| 819 | + DefaultFunction::UnMapData => Some(ExBudget::new( |
818 | 820 | self.un_map_data.mem.cost([args[0]]), |
819 | 821 | self.un_map_data.cpu.cost([args[0]]), |
820 | 822 | )), |
821 | | - "un_list_data" => Some(ExBudget::new( |
| 823 | + DefaultFunction::UnListData => Some(ExBudget::new( |
822 | 824 | self.un_list_data.mem.cost([args[0]]), |
823 | 825 | self.un_list_data.cpu.cost([args[0]]), |
824 | 826 | )), |
825 | | - "un_i_data" => Some(ExBudget::new( |
| 827 | + DefaultFunction::UnIData => Some(ExBudget::new( |
826 | 828 | self.un_i_data.mem.cost([args[0]]), |
827 | 829 | self.un_i_data.cpu.cost([args[0]]), |
828 | 830 | )), |
829 | | - "un_b_data" => Some(ExBudget::new( |
| 831 | + DefaultFunction::UnBData => Some(ExBudget::new( |
830 | 832 | self.un_b_data.mem.cost([args[0]]), |
831 | 833 | self.un_b_data.cpu.cost([args[0]]), |
832 | 834 | )), |
833 | | - "equals_data" => Some(ExBudget::new( |
| 835 | + DefaultFunction::EqualsData => Some(ExBudget::new( |
834 | 836 | self.equals_data.mem.cost([args[0], args[1]]), |
835 | 837 | self.equals_data.cpu.cost([args[0], args[1]]), |
836 | 838 | )), |
837 | | - "mk_pair_data" => Some(ExBudget::new( |
| 839 | + DefaultFunction::MkPairData => Some(ExBudget::new( |
838 | 840 | self.mk_pair_data.mem.cost([args[0], args[1]]), |
839 | 841 | self.mk_pair_data.cpu.cost([args[0], args[1]]), |
840 | 842 | )), |
841 | | - "mk_nil_data" => Some(ExBudget::new( |
| 843 | + DefaultFunction::MkNilData => Some(ExBudget::new( |
842 | 844 | self.mk_nil_data.mem.cost([args[0]]), |
843 | 845 | self.mk_nil_data.cpu.cost([args[0]]), |
844 | 846 | )), |
845 | | - "mk_nil_pair_data" => Some(ExBudget::new( |
| 847 | + DefaultFunction::MkNilPairData => Some(ExBudget::new( |
846 | 848 | self.mk_nil_pair_data.mem.cost([args[0]]), |
847 | 849 | self.mk_nil_pair_data.cpu.cost([args[0]]), |
848 | 850 | )), |
|
0 commit comments