-
Notifications
You must be signed in to change notification settings - Fork 2
/
parameter.cpp
138 lines (127 loc) · 2.91 KB
/
parameter.cpp
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#include <stdio.h>
#include <stdexcept>
#include "parameter.h"
Parameter::Parameter(){
m_valuePtr = NULL;
}
Parameter::~Parameter(){
if(m_valuePtr)
{
switch(m_type){
case 0:{
bool* ptr = (bool*) m_valuePtr;
// printf("bool deleted\n");
delete ptr;
break;
}
case 1:{
int* ptr = (int *) m_valuePtr;
// printf("int deleted\n");
delete ptr;
break;
}
case 2:{
float* ptr = (float *) m_valuePtr;
// printf("float deleted\n");
delete ptr;
break;
}
default:{
throw std::invalid_argument("unknown type happened");
break;
}
}
}
else
throw std::invalid_argument("no data");
}
std::string Parameter::getType(){
std::string typeValue;
switch(m_type){
case 0:{
typeValue = std::string("bool");
break;
}
case 1:{
typeValue = std::string("int");
break;
}
case 2:{
typeValue = std::string("float");
break;
}
default:{
typeValue = std::string("unknown");
break;
}
}
return typeValue;
}
std::string Parameter::getString()
{
switch(m_type){
case 0:{
if(getBool())
return std::string("true");
else
return std::string("false");
break;
}
case 1:{
return std::to_string(getInt());
break;
}
case 2:{
return std::to_string(getFloat());
break;
}
default:{
return std::string("UNDEFINED");
break;
}
}
}
//BOOL
Parameter::Parameter(bool value){
bool* ptr = new bool;
*ptr = value;
m_valuePtr = (void *) ptr;
m_type = 0;
// printf("boolean created %s\n", value ? "true" : "false");
}
bool Parameter::getBool(){
bool* ptr = (bool*) m_valuePtr;
if (m_type != 0){
throw std::invalid_argument("Parameter is not of type Bool");
}
return *ptr;
}
//INT
Parameter::Parameter(int value){
int* ptr = new int;
*ptr = value;
m_valuePtr = (void *) ptr;
m_type = 1;
// printf("int created: %d\n", value);
}
int Parameter::getInt(){
int* ptr = (int*) m_valuePtr;
if (m_type != 1){
throw std::invalid_argument("Parameter is not of type Int");
}
return *ptr;
}
//FLOAT
Parameter::Parameter(float value){
float* ptr = new float;
*ptr = value;
m_valuePtr = (void *) ptr;
m_type = 2;
}
float Parameter::getFloat(){
float* ptr = (float*) m_valuePtr;
if (m_type != 2){
throw std::invalid_argument("Parameter is not of type Float");
}
return *ptr;
}