mirror of
https://github.com/znc/znc.git
synced 2026-03-28 17:42:41 +01:00
Document most of CString and MCString
There are only some "minor" functions that are still undocumented now. This also sneaks in an API change: A useless file mode argument to MCString::ReadFromDisk() is gone. Opening a file doesn't ask for a file mode. git-svn-id: https://znc.svn.sourceforge.net/svnroot/znc/trunk@2157 726aef4b-f618-498e-8847-2d620e286838
This commit is contained in:
@@ -147,7 +147,7 @@ void CModule::SetClient(CClient* pClient) { m_pClient = pClient; }
|
||||
|
||||
bool CModule::LoadRegistry() {
|
||||
//CString sPrefix = (m_pUser) ? m_pUser->GetUserName() : ".global";
|
||||
return (m_mssRegistry.ReadFromDisk(GetSavePath() + "/.registry", 0600) == MCString::MCS_SUCCESS);
|
||||
return (m_mssRegistry.ReadFromDisk(GetSavePath() + "/.registry") == MCString::MCS_SUCCESS);
|
||||
}
|
||||
|
||||
bool CModule::SaveRegistry() const {
|
||||
|
||||
@@ -1031,7 +1031,7 @@ bool CString::RightChomp(unsigned int uLen) {
|
||||
}
|
||||
|
||||
//////////////// MCString ////////////////
|
||||
int MCString::WriteToDisk(const CString& sPath, mode_t iMode) const {
|
||||
MCString::status_t MCString::WriteToDisk(const CString& sPath, mode_t iMode) const {
|
||||
CFile cFile(sPath);
|
||||
|
||||
if (this->empty()) {
|
||||
@@ -1066,10 +1066,10 @@ int MCString::WriteToDisk(const CString& sPath, mode_t iMode) const {
|
||||
return MCS_SUCCESS;
|
||||
}
|
||||
|
||||
int MCString::ReadFromDisk(const CString& sPath, mode_t iMode) {
|
||||
MCString::status_t MCString::ReadFromDisk(const CString& sPath) {
|
||||
clear();
|
||||
CFile cFile(sPath);
|
||||
if (!cFile.Open(O_RDONLY, iMode)) {
|
||||
if (!cFile.Open(O_RDONLY)) {
|
||||
return MCS_EOPEN;
|
||||
}
|
||||
|
||||
|
||||
213
ZNCString.h
213
ZNCString.h
@@ -226,31 +226,108 @@ public:
|
||||
*/
|
||||
CString Right(unsigned int uCount) const;
|
||||
|
||||
/** Get the first line of this string.
|
||||
* @return The first line of text.
|
||||
*/
|
||||
CString FirstLine() const { return Token(0, false, "\n"); }
|
||||
|
||||
/** Get a token out of this string. For example in the string "a bc d e",
|
||||
* each of "a", "bc", "d" and "e" are tokens.
|
||||
* @param uPos The number of the token you are interested. The first
|
||||
* token has a position of 0.
|
||||
* @param bRest If false, only the token you asked for is returned. Else
|
||||
* you get the substring starting from the beginning of
|
||||
* your token.
|
||||
* @param sSep Seperator between tokens.
|
||||
* @param bAllowEmpty If this is true, empty tokens are allowed. In the
|
||||
* example from above this means that there is a
|
||||
* token "" before the "e" token.
|
||||
* @return The token you asked for and, if bRest is true, everything
|
||||
* after it.
|
||||
* @see Split() if you need a string split into all of its tokens.
|
||||
*/
|
||||
CString Token(unsigned int uPos, bool bRest = false, const CString& sSep = " ", bool bAllowEmpty = false) const;
|
||||
|
||||
/** Get a token out of this string. This function behaves much like the
|
||||
* other Token() function in this class. The extra arguments are
|
||||
* handled similarly to Split().
|
||||
*/
|
||||
CString Token(unsigned int uPos, bool bRest, const CString& sSep, bool bAllowEmpty, const CString& sLeft, const CString& sRight, bool bTrimQuotes = true) const;
|
||||
|
||||
unsigned int URLSplit(MCString& msRet) const;
|
||||
unsigned int OptionSplit(MCString& msRet, bool bUpperKeys = false) const;
|
||||
unsigned int QuoteSplit(VCString& vsRet) const;
|
||||
|
||||
/** Split up this string into tokens.
|
||||
* Via sLeft and sRight you can define "markers" like with Replace().
|
||||
* Anything in such a marked section is treated as a single token. All
|
||||
* occurences of sDelim in such a block are ignored.
|
||||
* @param sDelim Delimiter between tokens.
|
||||
* @param vsRet Vector for returning the result.
|
||||
* @param bAllowEmpty Do empty tokens count as a valid token?
|
||||
* @param sLeft Left delimiter like with Replace().
|
||||
* @param sRight Right delimiter like with Replace().
|
||||
* @param bTrimQuotes Should sLeft and sRight be removed from the token
|
||||
* they mark?
|
||||
* @param bTrimWhiteSpace If this is true, CString::Trim() is called on
|
||||
* each token.
|
||||
* @return The number of tokens found.
|
||||
*/
|
||||
unsigned int 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.
|
||||
* This function is identical to the other CString::Split(), except that
|
||||
* the result is returned as a SCString instead of a VCString.
|
||||
*/
|
||||
unsigned int Split(const CString& sDelim, SCString& ssRet, bool bAllowEmpty = true,
|
||||
const CString& sLeft = "", const CString& sRight = "", bool bTrimQuotes = true,
|
||||
bool bTrimWhiteSpace = false) const;
|
||||
|
||||
/** Produces a random string.
|
||||
* @param uLength The length of the resulting string.
|
||||
* @return A random string.
|
||||
*/
|
||||
static CString RandomString(unsigned int uLength);
|
||||
|
||||
/** @return The MD5 hash of this string. */
|
||||
CString MD5() const;
|
||||
/** @return The SHA256 hash of this string. */
|
||||
CString SHA256() const;
|
||||
|
||||
/** Treat this string as base64-encoded data and decode it.
|
||||
* @param sRet String to which the result of the decode is safed.
|
||||
* @return The length of the resulting string.
|
||||
*/
|
||||
unsigned long Base64Decode(CString& sRet) const;
|
||||
/** Treat this string as base64-encoded data and decode it.
|
||||
* The result is saved in this CString instance.
|
||||
* @return The length of the resulting string.
|
||||
*/
|
||||
unsigned long Base64Decode();
|
||||
/** Treat this string as base64-encoded data and decode it.
|
||||
* @return The decoded string.
|
||||
*/
|
||||
CString Base64Decode_n() const;
|
||||
/** Base64-encode the current string.
|
||||
* @param sRet String where the result is saved.
|
||||
* @param uWrap A boolean(!?!) that decides if the result should be
|
||||
* wrapped after everywhere 57 characters.
|
||||
* @return true unless this code is buggy.
|
||||
* @todo WTF @ uWrap.
|
||||
* @todo This only returns false if some formula we use was wrong?!
|
||||
*/
|
||||
bool Base64Encode(CString& sRet, unsigned int uWrap = 0) const;
|
||||
/** Base64-encode the current string.
|
||||
* This string is overwritten with the result of the encode.
|
||||
* @todo return value and param are as with Base64Encode() from above.
|
||||
*/
|
||||
bool Base64Encode(unsigned int uWrap = 0);
|
||||
/** Base64-encode the current string
|
||||
* @todo uWrap is as broken as Base64Encode()'s uWrap.
|
||||
* @return The encoded string.
|
||||
*/
|
||||
CString Base64Encode_n(unsigned int uWrap = 0) const;
|
||||
|
||||
#ifdef HAVE_LIBSSL
|
||||
@@ -261,36 +338,122 @@ public:
|
||||
void Crypt(const CString& sPass, bool bEncrypt, const CString& sIvec = "");
|
||||
#endif
|
||||
|
||||
/** Pretty-print a percent value.
|
||||
* @param d The percent value. This should be in range 0-100.
|
||||
* @return The "pretty" string.
|
||||
*/
|
||||
static CString ToPercent(double d);
|
||||
/** Pretty-print a number of bytes.
|
||||
* @param d The number of bytes.
|
||||
* @return A string describing the number of bytes.
|
||||
*/
|
||||
static CString ToByteStr(unsigned long long d);
|
||||
/** Pretty-print a time span.
|
||||
* @param s Number of seconds to print.
|
||||
* @return A string like "4w 6d 4h 3m 58s".
|
||||
*/
|
||||
static CString ToTimeStr(unsigned long s);
|
||||
|
||||
/** @return True if this string is not "false". */
|
||||
bool ToBool() const;
|
||||
/** @return The numerical value of this string similar to atoi(). */
|
||||
short ToShort() const;
|
||||
/** @return The numerical value of this string similar to atoi(). */
|
||||
unsigned short ToUShort() const;
|
||||
/** @return The numerical value of this string similar to atoi(). */
|
||||
int ToInt() const;
|
||||
/** @return The numerical value of this string similar to atoi(). */
|
||||
long ToLong() const;
|
||||
/** @return The numerical value of this string similar to atoi(). */
|
||||
unsigned int ToUInt() const;
|
||||
/** @return The numerical value of this string similar to atoi(). */
|
||||
unsigned long ToULong() const;
|
||||
/** @return The numerical value of this string similar to atoi(). */
|
||||
unsigned long long ToULongLong() const;
|
||||
/** @return The numerical value of this string similar to atoi(). */
|
||||
long long ToLongLong() const;
|
||||
/** @return The numerical value of this string similar to atoi(). */
|
||||
double ToDouble() const;
|
||||
|
||||
/** Trim this string. All leading/trailing occurences of characters from
|
||||
* s are removed.
|
||||
* @param s A list of characters that should be trimmed.
|
||||
* @return true if this string was modified.
|
||||
*/
|
||||
bool Trim(const CString& s = " \t\r\n");
|
||||
/** Trim this string. All leading occurences of characters from s are
|
||||
* removed.
|
||||
* @param s A list of characters that should be trimmed.
|
||||
* @return true if this string was modified.
|
||||
*/
|
||||
bool TrimLeft(const CString& s = " \t\r\n");
|
||||
/** Trim this string. All trailing occurences of characters from s are
|
||||
* removed.
|
||||
* @param s A list of characters that should be trimmed.
|
||||
* @return true if this string was modified.
|
||||
*/
|
||||
bool TrimRight(const CString& s = " \t\r\n");
|
||||
/** Trim this string. All leading/trailing occurences of characters from
|
||||
* s are removed. This CString instance is not modified.
|
||||
* @param s A list of characters that should be trimmed.
|
||||
* @return The trimmed string.
|
||||
*/
|
||||
CString Trim_n(const CString& s = " \t\r\n") const;
|
||||
/** Trim this string. All leading occurences of characters from s are
|
||||
* removed. This CString instance is not modified.
|
||||
* @param s A list of characters that should be trimmed.
|
||||
* @return The trimmed string.
|
||||
*/
|
||||
CString TrimLeft_n(const CString& s = " \t\r\n") const;
|
||||
/** Trim this string. All trailing occurences of characters from s are
|
||||
* removed. This CString instance is not modified.
|
||||
* @param s A list of characters that should be trimmed.
|
||||
* @return The trimmed string.
|
||||
*/
|
||||
CString TrimRight_n(const CString& s = " \t\r\n") const;
|
||||
|
||||
/** Trim a given prefix.
|
||||
* @param sPrefix The prefix that should be removed.
|
||||
* @return True if this string was modified.
|
||||
*/
|
||||
bool TrimPrefix(const CString& sPrefix);
|
||||
/** Trim a given suffix.
|
||||
* @param sSuffix The suffix that should be removed.
|
||||
* @return True if this string was modified.
|
||||
*/
|
||||
bool TrimSuffix(const CString& sSuffix);
|
||||
/** Trim a given prefix.
|
||||
* @param sPrefix The prefix that should be removed.
|
||||
* @return A copy of this string without the prefix.
|
||||
*/
|
||||
CString TrimPrefix_n(const CString& sPrefix) const;
|
||||
/** Trim a given suffix.
|
||||
* @param sSuffix The suffix that should be removed.
|
||||
* @return A copy of this string without the prefix.
|
||||
*/
|
||||
CString TrimSuffix_n(const CString& sSuffix) const;
|
||||
|
||||
/** Remove characters from the beginning of this string.
|
||||
* @param uLen The number of characters to remove.
|
||||
* @return true if this string was modified.
|
||||
*/
|
||||
bool LeftChomp(unsigned int uLen = 1);
|
||||
/** Remove characters from the end of this string.
|
||||
* @param uLen The number of characters to remove.
|
||||
* @return true if this string was modified.
|
||||
*/
|
||||
bool RightChomp(unsigned int uLen = 1);
|
||||
/** Remove characters from the beginning of this string.
|
||||
* This string object isn't modified.
|
||||
* @param uLen The number of characters to remove.
|
||||
* @return The result of the conversion.
|
||||
*/
|
||||
CString LeftChomp_n(unsigned int uLen = 1) const;
|
||||
/** Remove characters from the end of this string.
|
||||
* This string object isn't modified.
|
||||
* @param uLen The number of characters to remove.
|
||||
* @return The result of the conversion.
|
||||
*/
|
||||
CString RightChomp_n(unsigned int uLen = 1) const;
|
||||
|
||||
private:
|
||||
@@ -298,28 +461,70 @@ protected:
|
||||
unsigned char* strnchr(const unsigned char* src, unsigned char c, unsigned int iMaxBytes, unsigned char* pFill = NULL, unsigned int* piCount = NULL) const;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief A dictionary for strings.
|
||||
*
|
||||
* This class maps strings to other strings.
|
||||
*/
|
||||
class MCString : public map<CString, CString> {
|
||||
public:
|
||||
/** Construct an empty MCString. */
|
||||
MCString() : map<CString, CString>() {}
|
||||
/** Destruct this MCString. */
|
||||
virtual ~MCString() { clear(); }
|
||||
|
||||
enum
|
||||
/** Status codes that can be returned by WriteToDisk() and
|
||||
* ReadFromDisk(). */
|
||||
enum status_t
|
||||
{
|
||||
/// No errors.
|
||||
MCS_SUCCESS = 0,
|
||||
/// Opening the file failed.
|
||||
MCS_EOPEN = 1,
|
||||
/// Writing to the file failed.
|
||||
MCS_EWRITE = 2,
|
||||
/// WriteFilter() failed.
|
||||
MCS_EWRITEFIL = 3,
|
||||
/// ReadFilter() failed.
|
||||
MCS_EREADFIL = 4
|
||||
};
|
||||
|
||||
int WriteToDisk(const CString& sPath, mode_t iMode = 0644) const;
|
||||
int ReadFromDisk(const CString& sPath, mode_t iMode = 0644);
|
||||
/** Write this map to a file.
|
||||
* @param sPath The file name to write to.
|
||||
* @param iMode The mode for the file.
|
||||
* @return The result of the operation.
|
||||
* @see WriteFilter.
|
||||
*/
|
||||
enum status_t WriteToDisk(const CString& sPath, mode_t iMode = 0644) const;
|
||||
/** Read a map from a file.
|
||||
* @param sPath The file name to read from.
|
||||
* @return The result of the operation.
|
||||
* @see ReadFilter.
|
||||
*/
|
||||
enum status_t ReadFromDisk(const CString& sPath);
|
||||
|
||||
/** Filter used while writing this map. This function is called by
|
||||
* WriteToDisk() for each pair that is going to be written. This
|
||||
* function has the chance to modify the data that will be written.
|
||||
* @param sKey The key that will be written. Can be modified.
|
||||
* @param sValue The value that will be written. Can be modified.
|
||||
* @return true unless WriteToDisk() should fail with MCS_EWRITEFIL.
|
||||
*/
|
||||
virtual bool WriteFilter(CString& sKey, CString& sValue) const { return true; }
|
||||
/** Filter used while reading this map. This function is called by
|
||||
* ReadFromDisk() for each pair that is beging read. This function has
|
||||
* the chance to modify the data that is being read.
|
||||
* @param sKey The key that was read. Can be modified.
|
||||
* @param sValue The value that was read. Can be modified.
|
||||
* @return true unless ReadFromDisk() should fail with MCS_EWRITEFIL.
|
||||
*/
|
||||
virtual bool ReadFilter(CString& sKey, CString& sValue) const { return true; }
|
||||
|
||||
//! make them parse safe, right now using hex encoding on anything !isalnum
|
||||
/** Encode a value so that it can safely be parsed by ReadFromDisk().
|
||||
* This is an internal function.
|
||||
*/
|
||||
virtual CString& Encode(CString& sValue) const;
|
||||
/** Undo the effects of Encode(). This is an internal function. */
|
||||
virtual CString& Decode(CString& sValue) const;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user