9#ifndef SQUID_SRC_BASE_CHARACTERSET_H
10#define SQUID_SRC_BASE_CHARACTERSET_H
12#include <initializer_list>
23 explicit CharacterSet(
const char *label =
"anonymous",
const char *
const chars =
"");
28 CharacterSet(
const char *label,
unsigned char low,
unsigned char high);
33 CharacterSet(
const char *label, std::initializer_list<std::pair<uint8_t,uint8_t>> ranges);
CharacterSet operator+(CharacterSet lhs, const CharacterSet &rhs)
CharacterSet operator-(CharacterSet lhs, const CharacterSet &rhs)
std::ostream & operator<<(std::ostream &, const CharacterSet &)
optimized set of C chars, with quick membership test and merge support
bool operator[](unsigned char c) const
whether a given character exists in the set
static const CharacterSet TOKEN68C
CharacterSet complement(const char *complementLabel=nullptr) const
bool isEmpty() const
whether the set lacks any members
std::vector< uint8_t > Storage
static const CharacterSet TCHAR
static const CharacterSet ETAGC
static const CharacterSet SP
CharacterSet & rename(const char *label)
change name; handy in const declarations that use operators
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
bool operator==(const CharacterSet &cs) const
static const CharacterSet DQUOTE
static const CharacterSet DIGIT
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
bool operator!=(const CharacterSet &cs) const
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