@@ -13,55 +13,85 @@ type Operation struct {
1313func newConvertNumeric [N numeric ](podConversion , displayConversion ConversionDescriptor ) valueConverter {
1414 return func (value Value ) Value {
1515 numeric := value .(NumericValue [N ])
16- for _ , operation := range append (podConversion , displayConversion ... ) {
17- switch operation .Operator {
18- case "+" :
19- numeric .inner += N (operation .Operand )
20- case "-" :
21- numeric .inner -= N (operation .Operand )
22- case "*" :
23- numeric .inner *= N (operation .Operand )
24- case "/" :
25- numeric .inner /= N (operation .Operand )
26- }
27- }
16+ numeric .inner = applyOperations (numeric .inner , podConversion )
17+ numeric .inner = revertOperations (numeric .inner , displayConversion )
2818 return numeric
2919 }
3020}
3121
3222func newRevertNumeric [N numeric ](podConversion , displayConversion ConversionDescriptor ) valueReverter {
3323 return func (value Value ) Value {
3424 numeric := value .(NumericValue [N ])
35- for i := len (displayConversion ) - 1 ; i >= 0 ; i -- {
36- operation := displayConversion [i ]
37- switch operation .Operator {
38- case "+" :
39- numeric .inner -= N (operation .Operand )
40- case "-" :
41- numeric .inner += N (operation .Operand )
42- case "*" :
43- numeric .inner /= N (operation .Operand )
44- case "/" :
45- numeric .inner *= N (operation .Operand )
46- }
25+ numeric .inner = applyOperationsInv (numeric .inner , displayConversion )
26+ numeric .inner = revertOperationsInv (numeric .inner , podConversion )
27+ return numeric
28+ }
29+ }
30+
31+ func applyOperations [N numeric ](original N , conversion ConversionDescriptor ) N {
32+ for _ , operation := range conversion {
33+ switch operation .Operator {
34+ case "+" :
35+ original += N (operation .Operand )
36+ case "-" :
37+ original -= N (operation .Operand )
38+ case "*" :
39+ original *= N (operation .Operand )
40+ case "/" :
41+ original /= N (operation .Operand )
4742 }
43+ }
44+ return original
45+ }
4846
49- for i := len (podConversion ) - 1 ; i >= 0 ; i -- {
50- operation := podConversion [i ]
51- switch operation .Operator {
52- case "+" :
53- numeric .inner -= N (operation .Operand )
54- case "-" :
55- numeric .inner += N (operation .Operand )
56- case "*" :
57- numeric .inner /= N (operation .Operand )
58- case "/" :
59- numeric .inner *= N (operation .Operand )
60- }
47+ func revertOperations [N numeric ](original N , conversion ConversionDescriptor ) N {
48+ for _ , operation := range conversion {
49+ switch operation .Operator {
50+ case "+" :
51+ original -= N (operation .Operand )
52+ case "-" :
53+ original += N (operation .Operand )
54+ case "*" :
55+ original /= N (operation .Operand )
56+ case "/" :
57+ original *= N (operation .Operand )
6158 }
59+ }
60+ return original
61+ }
6262
63- return numeric
63+ func applyOperationsInv [N numeric ](original N , conversion ConversionDescriptor ) N {
64+ for i := len (conversion ) - 1 ; i >= 0 ; i -- {
65+ operation := conversion [i ]
66+ switch operation .Operator {
67+ case "+" :
68+ original += N (operation .Operand )
69+ case "-" :
70+ original -= N (operation .Operand )
71+ case "*" :
72+ original *= N (operation .Operand )
73+ case "/" :
74+ original /= N (operation .Operand )
75+ }
76+ }
77+ return original
78+ }
79+
80+ func revertOperationsInv [N numeric ](original N , conversion ConversionDescriptor ) N {
81+ for i := len (conversion ) - 1 ; i >= 0 ; i -- {
82+ operation := conversion [i ]
83+ switch operation .Operator {
84+ case "+" :
85+ original -= N (operation .Operand )
86+ case "-" :
87+ original += N (operation .Operand )
88+ case "*" :
89+ original /= N (operation .Operand )
90+ case "/" :
91+ original *= N (operation .Operand )
92+ }
6493 }
94+ return original
6595}
6696
6797func convertBoolean (value Value ) Value {
0 commit comments