-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathInversion.cpp
More file actions
57 lines (46 loc) · 1007 Bytes
/
Inversion.cpp
File metadata and controls
57 lines (46 loc) · 1007 Bytes
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
#include "Inversion.hpp"
//#include "temperatureconverter.hpp"
Inversion::Inversion():
_decConv{nullptr}
{}
Inversion::Inversion(std::shared_ptr<UnitConverter> converter)
{
//some typesafety
if((converter->toString() == "Fahrenheit To Celsius Converter") || (converter->toString() == "Celsius To Fahrenheit Converter" ))
{
_decConv = nullptr;
}
_decConv = converter;
}
std::shared_ptr<UnitConverter> Inversion::clone()
{
return std::make_shared<Inversion>();
}
double Inversion::convert(double input)
{
double result;
if(_decConv != nullptr)
{
result = input / _decConv->convert(1.0);
}
else
{
//if there is no decorator
result = input;
}
return result;
}
std::string Inversion::toString() const
{
std::string output = "Inversion: Inverts the given decorator.";
//checks whether the converter is decorated
if(_decConv != nullptr)
{
output += " Given decorator: " + _decConv->toString();
}
return output;
}
void Inversion::print() const
{
std::cout << toString();
}