35 std::string
skip(
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
36 "abcdefghijklmnopqrstuvwxyz"
39 size_t beg = 0, pos = 0, len = 0;
42 for(
size_t i=0;
i<
safe.size();
i++)
44 if(
more.find(
safe.at(
i)) != std::string::npos)
53 if(pos != std::string::npos)
63 std::isxdigit(
str.at(pos + 1)) &&
64 std::isxdigit(
str.at(pos + 2)))
66 out.append(
str, pos, 3);
89 size_t pos = 0, end = 0, len = 0;
97 if( pos + 2 < len && out.at(pos) ==
'%')
111 _(
"Encoded string contains a NUL byte")
134 static const unsigned char tab[] =
"0123456789ABCDEF";
135 unsigned char out[4];
138 out[1] =
tab[0x0f & (
c >> 4)];
139 out[2] =
tab[0x0f &
c];
143 return std::string((
char *)out);
151 if(
hex && std::isxdigit(
hex[0]) && std::isxdigit(
hex[1]))
153 char x[3] = {
hex[0],
hex[1],
'\0'};
154 return 0xff & ::strtol(
x,
NULL, 16);
166 const std::string &
pstr,
167 const std::string &
psep)
169 size_t beg = 0, pos = 0, len = 0;
173 _(
"Invalid parameter array split separator character")
183 if(pos != std::string::npos)
200 const std::string &
str,
201 const std::string &
psep,
202 const std::string &
vsep,
206 ParamVec::const_iterator
pitr;
213 _(
"Invalid parameter map split separator character")
222 if(pos != std::string::npos)
232 k =
pitr->substr(0, pos);
233 v =
pitr->substr(pos + 1);
255 const std::string &
psep)
258 ParamVec::const_iterator
i(
pvec.begin());
263 while( ++
i !=
pvec.end())
276 const std::string &
psep,
277 const std::string &
vsep,
278 const std::string &
safe)
283 _(
"Invalid parameter array join separator character")
288 for(std::string::size_type
i=0;
i<
safe.size();
i++)
290 if(
psep.find(
safe[
i]) == std::string::npos &&
297 ParamMap::const_iterator
i(
pmap.begin());
302 if( !
i->second.empty())
305 while( ++
i !=
pmap.end())
308 if( !
i->second.empty())
Reference counted access to a Tp object calling a custom Dispose function when the last AutoDispose h...
Thrown if the encoded string contains a NUL byte (%00).
String related utilities and Regular expression matching.
std::string encode(const std::string &str, const std::string &safe, EEncoding eflag)
Encodes a string using URL percent encoding.
int decode_octet(const char *hex)
Decode one character.
std::vector< std::string > ParamVec
A parameter vector container.
std::string encode_octet(const unsigned char c)
Encode one character.
void split(ParamVec &pvec, const std::string &pstr, const std::string &psep)
Split into a parameter vector.
std::string join(const ParamVec &pvec, const std::string &psep)
Join parameter vector to a string.
std::map< std::string, std::string > ParamMap
A parameter map container.
@ E_DECODED
Flag to request decoded string(s).
@ E_ENCODED
Flag to request encoded string(s).
std::string decode(const std::string &str, bool allowNUL)
Decodes a URL percent encoded string.
Easy-to use interface to the ZYPP dependency resolver.
#define ZYPP_THROW(EXCPT)
Drops a logline and throws the Exception.
#define URL_SAFE_CHARS
Characters that are safe for URL without percent-encoding.