19 Storage::const_iterator s = src.
chars_.begin();
20 const Storage::const_iterator e = src.
chars_.end();
21 Storage::iterator d =
chars_.begin();
34 Storage::const_iterator s = src.
chars_.begin();
35 const Storage::const_iterator e = src.
chars_.end();
36 Storage::iterator d =
chars_.begin();
49 chars_[
static_cast<uint8_t
>(c)] = 1;
56 chars_[
static_cast<uint8_t
>(c)] = 0;
66 chars_[
static_cast<uint8_t
>(low)] = 1;
69 chars_[
static_cast<uint8_t
>(high)] = 1;
76 CharacterSet result((label ? label :
"complement_of_some_other_set"),
"");
79 std::logical_not<Storage::value_type>());
84 name(label ? label:
"anonymous"),
87 const size_t clen = strlen(c);
88 for (
size_t i = 0; i < clen; ++i)
93 name(label ? label:
"anonymous"),
100 name(label ? label:
"anonymous"),
103 for (
auto range: ranges)
104 addRange(range.first, range.second);
110 for (
size_t idx = 0; idx < 256; ++idx) {
112 os << static_cast<char>(idx);
133 s <<
"CharacterSet(" << c.
name <<
')';
152CharacterSet::CTEXT(
"ctext", {{0x09,0x09},{0x20,0x20},{0x2a,0x5b},{0x5d,0x7e},{0x80,0xff}}),
153CharacterSet::TCHAR(
"TCHAR",
"!#$%&'*+-.^_`|~0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"),
155CharacterSet::QDTEXT(
"QDTEXT", {{0x09,0x09},{0x20,0x21},{0x23,0x5b},{0x5d,0x7e},{0x80,0xff}}),
167 static const auto chars =
new CharacterSet(
"RFC3986_UNRESERVED",
"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-._~");
CharacterSet operator+(CharacterSet lhs, const CharacterSet &rhs)
CharacterSet operator-(CharacterSet lhs, const CharacterSet &rhs)
std::ostream & operator<<(std::ostream &s, const CharacterSet &c)
optimized set of C chars, with quick membership test and merge support
static const CharacterSet TOKEN68C
CharacterSet complement(const char *complementLabel=nullptr) const
std::vector< uint8_t > Storage
static const CharacterSet TCHAR
static const CharacterSet ETAGC
static const CharacterSet SP
CharacterSet & operator-=(const CharacterSet &rhs)
set subtraction: remove all characters that are also in rhs
CharacterSet & addRange(unsigned char low, unsigned char high)
add a list of character ranges, expressed as pairs [low,high], including both ends
CharacterSet & add(const unsigned char c)
add a given character to the character set
static const CharacterSet CTEXT
static const CharacterSet WSP
static const CharacterSet DQUOTE
static const CharacterSet DIGIT
CharacterSet(const char *label="anonymous", const char *const chars="")
a character set with a given label and contents
CharacterSet & operator+=(const CharacterSet &rhs)
set addition: add to this set all characters that are also in rhs
static const CharacterSet ALPHA
static const CharacterSet QDTEXT
static const CharacterSet HEXDIG
static const CharacterSet VCHAR
static const CharacterSet LF
const char * name
optional set label for debugging (default: "anonymous")
static const CharacterSet SPECIAL
CharacterSet & remove(const unsigned char c)
remove a given character from the character set
static const CharacterSet CR
static const CharacterSet & RFC3986_UNRESERVED()
allowed URI characters that do not have a reserved purpose, RFC 3986
static const CharacterSet OBSTEXT
static const CharacterSet CTL
static const CharacterSet HTAB
static const CharacterSet BIT
void printChars(std::ostream &os) const
prints all chars in arbitrary order, without any quoting/escaping