]>
git.ipfire.org Git - thirdparty/squid.git/blob - src/base/CharacterSet.cc
2 * Copyright (C) 1996-2014 The Squid Software Foundation and contributors
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
10 #include "CharacterSet.h"
16 CharacterSet::operator +=(const CharacterSet
&src
)
18 Storage::const_iterator s
= src
.chars_
.begin();
19 const Storage::const_iterator e
= src
.chars_
.end();
20 Storage::iterator d
= chars_
.begin();
31 CharacterSet::operator +(const CharacterSet
&src
) const
33 CharacterSet
rv(*this);
39 CharacterSet::add(const unsigned char c
)
41 chars_
[static_cast<uint8_t>(c
)] = 1;
46 CharacterSet::addRange(unsigned char low
, unsigned char high
)
48 //manual loop splitting is needed to cover case where high is 255
49 // otherwise low will wrap, resulting in infinite loop
51 chars_
[static_cast<uint8_t>(low
)] = 1;
54 chars_
[static_cast<uint8_t>(high
)] = 1;
59 CharacterSet::complement(const char *label
) const
61 CharacterSet
result((label
? label
: "complement_of_some_other_set"), "");
62 // negate each of our elements and add them to the result storage
63 std::transform(chars_
.begin(), chars_
.end(), result
.chars_
.begin(),
64 std::logical_not
<Storage::value_type
>());
68 CharacterSet::CharacterSet(const char *label
, const char * const c
) :
69 name(label
== NULL
? "anonymous" : label
),
70 chars_(Storage(256,0))
72 const size_t clen
= strlen(c
);
73 for (size_t i
= 0; i
< clen
; ++i
)
77 CharacterSet::CharacterSet(const char *label
, unsigned char low
, unsigned char high
) :
78 name(label
== NULL
? "anonymous" : label
),
79 chars_(Storage(256,0))
86 CharacterSet::ALPHA("ALPHA", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"),
87 CharacterSet::BIT("BIT","01"),
88 CharacterSet::CR("CR","\r"),
89 #if __cplusplus == 201103L
90 //CharacterSet::CTL("CTL",{{0x01,0x1f},{0x7f,0x7f}}),
92 CharacterSet::DIGIT("DIGIT","0123456789"),
93 CharacterSet::DQUOTE("DQUOTE","\""),
94 CharacterSet::HEXDIG("HEXDIG","0123456789aAbBcCdDeEfF"),
95 CharacterSet::HTAB("HTAB","\t"),
96 CharacterSet::LF("LF","\n"),
97 CharacterSet::SP("SP"," "),
98 CharacterSet::VCHAR("VCHAR", 0x21, 0x7e),
100 CharacterSet::WSP("WSP"," \t"),
101 #if __cplusplus == 201103L
102 //CharacterSet::CTEXT("ctext",{{0x09,0x09},{0x20,0x20},{0x2a,0x5b},{0x5d,0x7e},{0x80,0xff}}),
104 CharacterSet::TCHAR("TCHAR","!#$%&'*+-.^_`|~0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"),
105 CharacterSet::SPECIAL("SPECIAL","()<>@,;:\\\"/[]?={}"),
106 #if __cplusplus == 201103L
107 //CharacterSet::QDTEXT("QDTEXT",{{0x09,0x09},{0x20,0x21},{0x23,0x5b},{0x5d,0x7e},{0x80,0xff}}),
109 CharacterSet::OBSTEXT("OBSTEXT",0x80,0xff),
111 #if __cplusplus == 201103L
112 //CharacterSet::ETAGC("ETAGC",{{0x21,0x21},{0x23,0x7e},{0x80,0xff}}),
115 CharacterSet::TOKEN68C("TOKEN68C","-._~+/0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")