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
20namespace Poco {
21
22
23Token::Token(bool ignore) : _ignored(ignore)
24{
25}
26
27
28Token::~Token()
29{
30}
31
32
33bool Token::start(char c, std::istream& /*istr*/)
34{
35 _value = c;
36 return false;
37}
38
39
40void Token::finish(std::istream& /*istr*/)
41{
42}
43
44
45Token::Class Token::tokenClass() const
46{
47 return INVALID_TOKEN;
48}
49
50
51std::string Token::asString() const
52{
53 return _value;
54}
55
56
57#if defined(POCO_HAVE_INT64)
58Int64 Token::asInteger64() const
59{
60 return NumberParser::parse64(_value);
61}
62
63
64UInt64 Token::asUnsignedInteger64() const
65{
66 return NumberParser::parseUnsigned64(_value);
67}
68#endif
69
70
71int Token::asInteger() const
72{
73 return NumberParser::parse(_value);
74}
75
76
77unsigned Token::asUnsignedInteger() const
78{
79 return NumberParser::parseUnsigned(_value);
80}
81
82
83double Token::asFloat() const
84{
85 return NumberParser::parseFloat(_value);
86}
87
88
89char Token::asChar() const
90{
91 return _value.empty() ? 0 : _value[0];
92}
93
94
95void Token::ignore(bool ignored)
96{
97 _ignored = ignored;
98}
99
100bool Token::ignored() const
101{
102 return _ignored;
103}
104
105
106InvalidToken::InvalidToken()
107{
108}
109
110
111InvalidToken::~InvalidToken()
112{
113}
114
115
116Token::Class InvalidToken::tokenClass() const
117{
118 return INVALID_TOKEN;
119}
120
121
122EOFToken::EOFToken()
123{
124}
125
126
127EOFToken::~EOFToken()
128{
129}
130
131
132Token::Class EOFToken::tokenClass() const
133{
134 return EOF_TOKEN;
135}
136
137
138WhitespaceToken::WhitespaceToken() : Token(true)
139{
140}
141
142
143WhitespaceToken::~WhitespaceToken()
144{
145}
146
147
148Token::Class WhitespaceToken::tokenClass() const
149{
150 return WHITESPACE_TOKEN;
151}
152
153
154bool 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
165void 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