1
1
#include " Common.h"
2
2
3
-
4
3
TCHAR const *Extension::GetError ()
5
4
{
6
5
return Runtime.CopyString (error.c_str ());
7
6
}
8
7
TCHAR const *Extension::GetString ()
9
8
{
10
- if (!IsString ()) return _T (" " );
11
- TCHAR *t = Edif::ConvertString (current->u .string .ptr );
12
- TCHAR *c = Runtime.CopyString (t);
13
- Edif::FreeString (t);
14
- return c;
9
+ if (IsString ())
10
+ {
11
+ TCHAR *t = Edif::ConvertString (current->u .string .ptr );
12
+ TCHAR *c = Runtime.CopyString (t);
13
+ Edif::FreeString (t);
14
+ return c;
15
+ }
16
+ else if (IsInteger ())
17
+ {
18
+ std::basic_ostringstream<TCHAR> oss;
19
+ oss << GetLong ();
20
+ return Runtime.CopyString (oss.str ().c_str ());
21
+ }
22
+ else if (IsDouble ())
23
+ {
24
+ std::basic_ostringstream<TCHAR> oss;
25
+ oss << GetDouble ();
26
+ return Runtime.CopyString (oss.str ().c_str ());
27
+ }
28
+ else if (IsBoolean ())
29
+ {
30
+ if (GetBoolNum ())
31
+ {
32
+ return _T (" true" );
33
+ }
34
+ else
35
+ {
36
+ return _T (" false" );
37
+ }
38
+ }
39
+ else if (IsNull ())
40
+ {
41
+ return _T (" null" );
42
+ }
43
+ return _T (" " );
15
44
}
16
45
int Extension::GetInteger ()
17
46
{
18
- return IsInteger () ? static_cast <int >(current->u .integer ) : 0 ;
47
+ if (IsInteger ())
48
+ {
49
+ return static_cast <int >(current->u .integer );
50
+ }
51
+ else if (IsDouble ())
52
+ {
53
+ return static_cast <int >(current->u .dbl );
54
+ }
55
+ else if (IsString ())
56
+ {
57
+ TCHAR *t = Edif::ConvertString (current->u .string .ptr );
58
+ std::basic_istringstream<TCHAR> iss (t);
59
+ Edif::FreeString (t);
60
+ int x = 0 ;
61
+ iss >> x;
62
+ return x;
63
+ }
64
+ return 0 ;
19
65
}
20
66
TCHAR const *Extension::GetLong ()
21
67
{
22
68
if (IsInteger ())
23
69
{
24
- std::basic_ostringstream<TCHAR> ss;
25
- ss << current->u .integer ;
26
- return Runtime.CopyString (ss.str ().c_str ());
70
+ std::basic_ostringstream<TCHAR> oss;
71
+ oss << current->u .integer ;
72
+ return Runtime.CopyString (oss.str ().c_str ());
73
+ }
74
+ else if (IsDouble ())
75
+ {
76
+ std::basic_ostringstream<TCHAR> oss;
77
+ oss << static_cast <long long >(current->u .dbl );
78
+ return Runtime.CopyString (oss.str ().c_str ());
79
+ }
80
+ else if (IsString ())
81
+ {
82
+ TCHAR *t = Edif::ConvertString (current->u .string .ptr );
83
+ std::basic_istringstream<TCHAR> iss (t);
84
+ Edif::FreeString (t);
85
+ long long x = 0 ;
86
+ iss >> x;
87
+ std::basic_ostringstream<TCHAR> oss;
88
+ oss << x;
89
+ return Runtime.CopyString (oss.str ().c_str ());
27
90
}
28
91
return _T (" 0" );
29
92
}
30
93
float Extension::GetFloat ()
31
94
{
32
- return IsDouble () ? static_cast <float >(current->u .dbl ) : 0 .0f ;
95
+ if (IsDouble ())
96
+ {
97
+ return static_cast <float >(current->u .dbl );
98
+ }
99
+ else if (IsInteger ())
100
+ {
101
+ return static_cast <float >(current->u .integer );
102
+ }
103
+ else if (IsString ())
104
+ {
105
+ TCHAR *t = Edif::ConvertString (current->u .string .ptr );
106
+ std::basic_istringstream<TCHAR> iss (t);
107
+ Edif::FreeString (t);
108
+ float x = 0 ;
109
+ iss >> x;
110
+ return x;
111
+ }
112
+ return 0 .0f ;
33
113
}
34
114
TCHAR const *Extension::GetDouble ()
35
115
{
36
116
if (IsDouble ())
37
117
{
38
- std::basic_ostringstream<TCHAR> ss;
39
- ss << std::setprecision (20 ) << current->u .dbl ;
40
- return Runtime.CopyString (ss.str ().c_str ());
118
+ std::basic_ostringstream<TCHAR> oss;
119
+ oss << std::setprecision (20 ) << current->u .dbl ;
120
+ return Runtime.CopyString (oss.str ().c_str ());
121
+ }
122
+ else if (IsInteger ())
123
+ {
124
+ std::basic_ostringstream<TCHAR> oss;
125
+ oss << static_cast <double >(current->u .integer );
126
+ return Runtime.CopyString (oss.str ().c_str ());
127
+ }
128
+ else if (IsString ())
129
+ {
130
+ TCHAR *t = Edif::ConvertString (current->u .string .ptr );
131
+ std::basic_istringstream<TCHAR> iss (t);
132
+ Edif::FreeString (t);
133
+ double x = 0 ;
134
+ iss >> x;
135
+ std::basic_ostringstream<TCHAR> oss;
136
+ oss << x;
137
+ return Runtime.CopyString (oss.str ().c_str ());
41
138
}
42
139
return _T (" 0.0" );
43
140
}
@@ -55,5 +152,17 @@ unsigned Extension::GetNumValues()
55
152
}
56
153
unsigned Extension::GetBoolNum ()
57
154
{
58
- return IsBoolean () ? (current->u .boolean ? 1 : 0 ) : 0 ;
155
+ if (IsBoolean ())
156
+ {
157
+ return current->u .boolean ? 1 : 0 ;
158
+ }
159
+ else if (IsInteger ())
160
+ {
161
+ return current->u .integer ? 1 : 0 ;
162
+ }
163
+ else if (IsString ())
164
+ {
165
+ return GetString () == std::basic_string<TCHAR>(_T (" true" )) ? 1 : 0 ;
166
+ }
167
+ return 0 ;
59
168
}
0 commit comments