20 #include <znc/zncconfig.h>
26 #include <sys/types.h>
28 #define _SQL(s) CString("'" + CString(s).Escape_n(CString::ESQL) + "'")
29 #define _URL(s) CString(s).Escape_n(CString::EURL)
30 #define _HTML(s) CString(s).Escape_n(CString::EHTML)
31 #define _NAMEDFMT(s) CString(s).Escape_n(CString::ENAMEDFMT)
38 typedef std::vector<std::pair<CString, CString> >
VPair;
40 static const unsigned char XX = 0xff;
41 static const unsigned char base64_table[256] = {
42 XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX,
43 XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX,
44 XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,62, XX,XX,XX,63,
45 52,53,54,55, 56,57,58,59, 60,61,XX,XX, XX,XX,XX,XX,
46 XX, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,
47 15,16,17,18, 19,20,21,22, 23,24,25,XX, XX,XX,XX,XX,
48 XX,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40,
49 41,42,43,44, 45,46,47,48, 49,50,51,XX, XX,XX,XX,XX,
50 XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX,
51 XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX,
52 XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX,
53 XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX,
54 XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX,
55 XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX,
56 XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX,
57 XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX, XX,XX,XX,XX,
78 explicit CString(
bool b) : std::string(b ?
"true" :
"false") {}
80 explicit CString(
unsigned char c);
82 explicit CString(
unsigned short i);
84 explicit CString(
unsigned int i);
86 explicit CString(
unsigned long i);
88 explicit CString(
unsigned long long i);
89 explicit CString(
double i,
int precision = 2);
90 explicit CString(
float i,
int precision = 2);
93 CString(
const char* c) : std::string(c) {}
94 CString(
const char* c,
size_t l) : std::string(c, l) {}
95 CString(
const std::string& s) : std::string(s) {}
96 CString(
size_t n,
char c) : std::string(n, c) {}
105 template <
typename T>
bool Convert(T *target)
const
107 std::stringstream ss(*
this);
119 template <
typename Iterator>
CString Join(Iterator i_start,
const Iterator &i_end)
const
121 if (i_start == i_end)
return CString(
"");
122 std::ostringstream output;
127 if (i_start == i_end)
return CString(output.str());
140 int CaseCmp(
const CString& s, CString::size_type uLen = CString::npos)
const;
148 int StrCmp(
const CString& s, CString::size_type uLen = CString::npos)
const;
157 bool Equals(
const CString& s,
bool bCaseSensitive =
false, CString::size_type uLen = CString::npos)
const;
284 CString Token(
size_t uPos,
bool bRest =
false,
const CString& sSep =
" ",
bool bAllowEmpty =
false)
const;
312 const CString& sLeft =
"",
const CString& sRight =
"",
bool bTrimQuotes =
true,
313 bool bTrimWhiteSpace =
false)
const;
320 const CString& sLeft =
"",
const CString& sRight =
"",
bool bTrimQuotes =
true,
321 bool bTrimWhiteSpace =
false)
const;
413 unsigned int ToUInt()
const;
530 unsigned char*
strnchr(
const unsigned char* src,
unsigned char c,
unsigned int iMaxBytes,
unsigned char* pFill = NULL,
unsigned int* piCount = NULL)
const;
538 class MCString :
public std::map<CString, CString> {
603 #endif // !ZNCSTRING_H
virtual bool ReadFilter(CString &sKey, CString &sValue) const
Filter used while reading this map.
Definition: ZNCString.h:593
unsigned long long ToULongLong() const
void Crypt(const CString &sPass, bool bEncrypt, const CString &sIvec="")
size_type URLSplit(MCString &msRet) const
bool Equals(const CString &s, bool bCaseSensitive=false, CString::size_type uLen=CString::npos) const
Check if this string is equal to some other string.
CString AsLower() const
Return a copy of this string with all characters turned into lower-case.
unsigned char * strnchr(const unsigned char *src, unsigned char c, unsigned int iMaxBytes, unsigned char *pFill=NULL, unsigned int *piCount=NULL) const
bool LeftChomp(size_type uLen=1)
Remove characters from the beginning of this string.
CString TrimSuffix_n(const CString &sSuffix) const
Trim a given suffix.
CString Token(size_t uPos, bool bRest=false, const CString &sSep=" ", bool bAllowEmpty=false) const
Get a token out of this string.
CString(const char *c, size_t l)
Definition: ZNCString.h:94
Writing to the file failed.
Definition: ZNCString.h:557
virtual CString & Encode(CString &sValue) const
Encode a value so that it can safely be parsed by ReadFromDisk().
void Decrypt(const CString &sPass, const CString &sIvec="")
Definition: ZNCString.h:74
CString()
Definition: ZNCString.h:92
bool TrimSuffix(const CString &sSuffix)
Trim a given suffix.
CString & MakeUpper()
Turn all characters in this string into their upper-case equivalent.
status_t
Status codes that can be returned by WriteToDisk() and ReadFromDisk().
Definition: ZNCString.h:550
CString(bool b)
Definition: ZNCString.h:78
~CString()
Definition: ZNCString.h:97
size_type Split(const CString &sDelim, VCString &vsRet, bool bAllowEmpty=true, const CString &sLeft="", const CString &sRight="", bool bTrimQuotes=true, bool bTrimWhiteSpace=false) const
Split up this string into tokens.
CString Base64Encode_n(unsigned int uWrap=0) const
Base64-encode the current string.
CString AsUpper() const
Return a copy of this string with all characters turned into upper-case.
Definition: ZNCString.h:72
CString TrimLeft_n(const CString &s=" \t\r\n") const
Trim this string.
static unsigned int Replace(CString &sStr, const CString &sReplace, const CString &sWith, const CString &sLeft="", const CString &sRight="", bool bRemoveDelims=false)
Replace all occurrences in a string.
bool TrimRight(const CString &s=" \t\r\n")
Trim this string.
ReadFilter() failed.
Definition: ZNCString.h:561
CString RightChomp_n(size_type uLen=1) const
Remove characters from the end of this string.
long long ToLongLong() const
enum status_t WriteToDisk(const CString &sPath, mode_t iMode=0644) const
Write this map to a file.
CString(const std::string &s)
Definition: ZNCString.h:95
CString TrimRight_n(const CString &s=" \t\r\n") const
Trim this string.
CString Join(Iterator i_start, const Iterator &i_end) const
Joins a collection of objects together, using 'this' as a delimiter.
Definition: ZNCString.h:119
std::set< CString > SCString
Definition: ZNCString.h:34
Definition: ZNCString.h:75
Definition: ZNCString.h:70
MCString()
Construct an empty MCString.
Definition: ZNCString.h:541
unsigned long ToULong() const
CString StripControls_n() const
Remove controls characters from this string.
EEscape
Definition: ZNCString.h:69
Definition: ZNCString.h:73
bool TrimLeft(const CString &s=" \t\r\n")
Trim this string.
CString FirstLine() const
Get the first line of this string.
Definition: ZNCString.h:267
Opening the file failed.
Definition: ZNCString.h:555
std::vector< CString > VCString
Definition: ZNCString.h:37
No errors.
Definition: ZNCString.h:553
CString Decrypt_n(const CString &sPass, const CString &sIvec="") const
String class that is used inside ZNC.
Definition: ZNCString.h:67
static CString ToPercent(double d)
Pretty-print a percent value.
WriteFilter() failed.
Definition: ZNCString.h:559
bool Base64Encode(CString &sRet, unsigned int uWrap=0) const
Base64-encode the current string.
bool StartsWith(const CString &sPrefix) const
Check whether the string starts with a given prefix.
static EEscape ToEscape(const CString &sEsc)
Definition: ZNCString.h:71
bool RightChomp(size_type uLen=1)
Remove characters from the end of this string.
bool Trim(const CString &s=" \t\r\n")
Trim this string.
static bool WildCmp(const CString &sWild, const CString &sString)
Do a wildcard comparision between two strings.
unsigned long Base64Decode()
Treat this string as base64-encoded data and decode it.
static const MCString EmptyMap
A static instance of an empty map.
Definition: ZNCString.h:546
enum status_t ReadFromDisk(const CString &sPath)
Read a map from a file.
CString Left(size_type uCount) const
Return the left part of the string.
unsigned int ToUInt() const
void Encrypt(const CString &sPass, const CString &sIvec="")
int StrCmp(const CString &s, CString::size_type uLen=CString::npos) const
Compare this string case sensitively to some other string.
size_type OptionSplit(MCString &msRet, bool bUpperKeys=false) const
A dictionary for strings.
Definition: ZNCString.h:538
CString & Escape(EEscape eFrom, EEscape eTo)
size_type QuoteSplit(VCString &vsRet) const
CString Trim_n(const CString &s=" \t\r\n") const
Trim this string.
static CString ToByteStr(unsigned long long d)
Pretty-print a number of bytes.
bool EndsWith(const CString &sSuffix) const
Check whether the string ends with a given suffix.
CString Escape_n(EEscape eFrom, EEscape eTo) const
static CString RandomString(unsigned int uLength)
Produces a random string.
CString & MakeLower()
Turn all characters in this string into their lower-case equivalent.
std::vector< std::pair< CString, CString > > VPair
Definition: ZNCString.h:38
unsigned short ToUShort() const
CString(const char *c)
Definition: ZNCString.h:93
int CaseCmp(const CString &s, CString::size_type uLen=CString::npos) const
Compare this string caselessly to some other string.
CString Encrypt_n(const CString &sPass, const CString &sIvec="") const
virtual ~MCString()
Destruct this MCString.
Definition: ZNCString.h:543
CString LeftChomp_n(size_type uLen=1) const
Remove characters from the beginning of this string.
static CString ToTimeStr(unsigned long s)
Pretty-print a time span.
bool Convert(T *target) const
Casts a CString to another type.
Definition: ZNCString.h:105
virtual CString & Decode(CString &sValue) const
Undo the effects of Encode().
CString & StripControls()
Remove controls characters from this string.
static CString NamedFormat(const CString &sFormat, const MCString &msValues)
Build a string from a format string, replacing values from a map.
bool TrimPrefix(const CString &sPrefix=":")
Trim a given prefix.
CString Replace_n(const CString &sReplace, const CString &sWith, const CString &sLeft="", const CString &sRight="", bool bRemoveDelims=false) const
Replace all occurrences in the current string.
CString(size_t n, char c)
Definition: ZNCString.h:96
CString Ellipsize(unsigned int uLen) const
Ellipsize the current string.
CString Base64Decode_n() const
Treat this string as base64-encoded data and decode it.
virtual bool WriteFilter(CString &sKey, CString &sValue) const
Filter used while writing this map.
Definition: ZNCString.h:585
CString Right(size_type uCount) const
Return the right part of the string.
CString TrimPrefix_n(const CString &sPrefix=":") const
Trim a given prefix.