1 | // |
---|---|
2 | // Token.cpp |
3 | // |
4 | // Library: Foundation |
5 | // Package: Streams |
6 | // Module: StringTokenizer |
7 | // |
8 | // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. |
9 | // and Contributors. |
10 | // |
11 | // SPDX-License-Identifier: BSL-1.0 |
12 | // |
13 | |
14 | |
15 | #include "Poco/Token.h" |
16 | #include "Poco/NumberParser.h" |
17 | #include "Poco/Ascii.h" |
18 | |
19 | |
20 | namespace Poco { |
21 | |
22 | |
23 | Token::Token(bool ignore) : _ignored(ignore) |
24 | { |
25 | } |
26 | |
27 | |
28 | Token::~Token() |
29 | { |
30 | } |
31 | |
32 | |
33 | bool Token::start(char c, std::istream& /*istr*/) |
34 | { |
35 | _value = c; |
36 | return false; |
37 | } |
38 | |
39 | |
40 | void Token::finish(std::istream& /*istr*/) |
41 | { |
42 | } |
43 | |
44 | |
45 | Token::Class Token::tokenClass() const |
46 | { |
47 | return INVALID_TOKEN; |
48 | } |
49 | |
50 | |
51 | std::string Token::asString() const |
52 | { |
53 | return _value; |
54 | } |
55 | |
56 | |
57 | #if defined(POCO_HAVE_INT64) |
58 | Int64 Token::asInteger64() const |
59 | { |
60 | return NumberParser::parse64(_value); |
61 | } |
62 | |
63 | |
64 | UInt64 Token::asUnsignedInteger64() const |
65 | { |
66 | return NumberParser::parseUnsigned64(_value); |
67 | } |
68 | #endif |
69 | |
70 | |
71 | int Token::asInteger() const |
72 | { |
73 | return NumberParser::parse(_value); |
74 | } |
75 | |
76 | |
77 | unsigned Token::asUnsignedInteger() const |
78 | { |
79 | return NumberParser::parseUnsigned(_value); |
80 | } |
81 | |
82 | |
83 | double Token::asFloat() const |
84 | { |
85 | return NumberParser::parseFloat(_value); |
86 | } |
87 | |
88 | |
89 | char Token::asChar() const |
90 | { |
91 | return _value.empty() ? 0 : _value[0]; |
92 | } |
93 | |
94 | |
95 | void Token::ignore(bool ignored) |
96 | { |
97 | _ignored = ignored; |
98 | } |
99 | |
100 | bool Token::ignored() const |
101 | { |
102 | return _ignored; |
103 | } |
104 | |
105 | |
106 | InvalidToken::InvalidToken() |
107 | { |
108 | } |
109 | |
110 | |
111 | InvalidToken::~InvalidToken() |
112 | { |
113 | } |
114 | |
115 | |
116 | Token::Class InvalidToken::tokenClass() const |
117 | { |
118 | return INVALID_TOKEN; |
119 | } |
120 | |
121 | |
122 | EOFToken::EOFToken() |
123 | { |
124 | } |
125 | |
126 | |
127 | EOFToken::~EOFToken() |
128 | { |
129 | } |
130 | |
131 | |
132 | Token::Class EOFToken::tokenClass() const |
133 | { |
134 | return EOF_TOKEN; |
135 | } |
136 | |
137 | |
138 | WhitespaceToken::WhitespaceToken() : Token(true) |
139 | { |
140 | } |
141 | |
142 | |
143 | WhitespaceToken::~WhitespaceToken() |
144 | { |
145 | } |
146 | |
147 | |
148 | Token::Class WhitespaceToken::tokenClass() const |
149 | { |
150 | return WHITESPACE_TOKEN; |
151 | } |
152 | |
153 | |
154 | bool WhitespaceToken::start(char c, std::istream& /*istr*/) |
155 | { |
156 | if (Ascii::isSpace(c)) |
157 | { |
158 | _value = c; |
159 | return true; |
160 | } |
161 | return false; |
162 | } |
163 | |
164 | |
165 | void WhitespaceToken::finish(std::istream& istr) |
166 | { |
167 | int c = istr.peek(); |
168 | while (Ascii::isSpace(c)) |
169 | { |
170 | istr.get(); |
171 | _value += (char) c; |
172 | c = istr.peek(); |
173 | } |
174 | } |
175 | |
176 | |
177 | } // namespace Poco |
178 |