]>
git.ipfire.org Git - thirdparty/squid.git/blob - src/parser/Tokenizer.cc
2 #include "parser/Tokenizer.h"
5 Parser::Tokenizer::token(SBuf
&returnedToken
, const CharacterSet
&delimiters
)
9 SBuf::size_type tokenLen
= 0;
11 // can't use prefix as we're looking for the first char not in delimiters
12 tokenLen
= buf_
.findFirstOf(delimiters
); // not found = npos => consume to end
13 retval
= buf_
.consume(tokenLen
);
15 returnedToken
= retval
;
20 Parser::Tokenizer::prefix(SBuf
&returnedToken
, const CharacterSet
&tokenChars
, const SBuf::size_type limit
)
22 SBuf::size_type prefixLen
= buf_
.substr(0,limit
).findFirstNotOf(tokenChars
);
25 returnedToken
= buf_
.consume(prefixLen
);
30 Parser::Tokenizer::skip(const CharacterSet
&tokenChars
)
32 SBuf::size_type prefixLen
= buf_
.findFirstNotOf(tokenChars
);
35 buf_
.consume(prefixLen
);
40 Parser::Tokenizer::skip(const SBuf
&tokenToSkip
)
42 if (buf_
.startsWith(tokenToSkip
)) {
43 buf_
.consume(tokenToSkip
.length());
50 Parser::Tokenizer::skip(const char tokenChar
)
52 if (buf_
[0] == tokenChar
) {
59 // adapted from compatr/strtoll.c
61 Parser::Tokenizer::int64 (int64_t & result
, int base
)
66 // API mismatch with strtoll: we don't eat leading space.
67 if (xisspace(buf_
[0]))
71 errno
= 0; // reset errno
73 int64_t rv
= strtoll(buf_
.rawContent(), &eon
, base
);
78 buf_
.consume(eon
- buf_
.rawContent()); // consume the parsed chunk