/
OperationBuilder.cs
82 lines (77 loc) · 2.78 KB
/
OperationBuilder.cs
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace RPN
{
public static class OperationBuilder
{
public static Operation Build(CalculationStack stack, CalculationMode mode, OperationType type)
{
// Zacznij od sprawdzania operacji ktore sa niezalezne od trybu
switch (type)
{
case OperationType.C:
return new Erase(stack);
case OperationType.AC:
return new Clear(stack);
case OperationType.ENTER:
return new Enter(stack);
case OperationType.POP:
return new Pop(stack);
case OperationType.SWAP:
return new Swap(stack);
case OperationType.MC:
return new MemoryClear(stack);
case OperationType.MR:
return new MemoryRecall(stack);
case OperationType.Mplus:
return new MemoryPlus(stack);
case OperationType.Mminus:
return new MemoryMinus(stack);
}
if (mode == CalculationMode.Date) {
switch (type)
{
case OperationType.SUB:
return new SubDate(stack);
case OperationType.ADD:
return new AddDate(stack);
}
}
if (mode == CalculationMode.Time)
{
switch (type)
{
case OperationType.SUB:
return new SubTime(stack);
case OperationType.ADD:
return new AddTime(stack);
}
}
switch (type)
{
case OperationType.SQRT:
return new SqrtNumber(stack);
case OperationType.POW:
return new PowerNumber(stack);
case OperationType.INV_X:
return new InvertNumber(stack);
case OperationType.PLUS_MINUS:
return new ChangeSign(stack);
case OperationType.PERCENT:
return new PercentNumber(stack);
case OperationType.DIV:
return new DivNumber(stack);
case OperationType.MUL:
return new MulNumber(stack);
case OperationType.SUB:
return new SubNumber(stack);
case OperationType.ADD:
return new AddNumber(stack);
}
return null;
}
}
}