Added the case-insensitive startSkip almost in the form suggested by Olaf Conradi.
Added methods for converting a String or Configuration entry to double. git-svn-id: http://yate.null.ro/svn/yate/trunk@711 acf43c95-373e-0410-b603-e72c3f656dc1
This commit is contained in:
parent
20eacad589
commit
4fb35c4015
|
@ -89,6 +89,12 @@ int Configuration::getIntValue(const String& sect, const String& key, const Toke
|
|||
return s ? s->toInteger(tokens,defvalue) : defvalue;
|
||||
}
|
||||
|
||||
double Configuration::getDoubleValue(const String& sect, const String& key, double defvalue) const
|
||||
{
|
||||
const NamedString *s = getKey(sect,key);
|
||||
return s ? s->toDouble(defvalue) : defvalue;
|
||||
}
|
||||
|
||||
bool Configuration::getBoolValue(const String& sect, const String& key, bool defvalue) const
|
||||
{
|
||||
const NamedString *s = getKey(sect,key);
|
||||
|
|
|
@ -130,6 +130,12 @@ int NamedList::getIntValue(const String& name, const TokenDict* tokens, int defv
|
|||
return s ? s->toInteger(tokens,defvalue) : defvalue;
|
||||
}
|
||||
|
||||
double NamedList::getDoubleValue(const String& name, double defvalue) const
|
||||
{
|
||||
const NamedString *s = getParam(name);
|
||||
return s ? s->toDouble(defvalue) : defvalue;
|
||||
}
|
||||
|
||||
bool NamedList::getBoolValue(const String& name, bool defvalue) const
|
||||
{
|
||||
const NamedString *s = getParam(name);
|
||||
|
|
|
@ -339,6 +339,17 @@ int String::toInteger(const TokenDict* tokens, int defvalue, int base) const
|
|||
return toInteger(defvalue,base);
|
||||
}
|
||||
|
||||
double String::toDouble(double defvalue) const
|
||||
{
|
||||
if (!m_string)
|
||||
return defvalue;
|
||||
char *eptr = 0;
|
||||
double val= ::strtod(m_string,&eptr);
|
||||
if (!eptr || *eptr)
|
||||
return defvalue;
|
||||
return val;
|
||||
}
|
||||
|
||||
static const char* str_false[] = { "false", "no", "off", "disable", 0 };
|
||||
static const char* str_true[] = { "true", "yes", "on", "enable", 0 };
|
||||
|
||||
|
@ -641,7 +652,7 @@ int String::rfind(char what) const
|
|||
return s ? s-m_string : -1;
|
||||
}
|
||||
|
||||
bool String::startsWith(const char* what, bool wordBreak) const
|
||||
bool String::startsWith(const char* what, bool wordBreak, bool caseInsensitive) const
|
||||
{
|
||||
if (!(m_string && what && *what))
|
||||
return false;
|
||||
|
@ -650,12 +661,15 @@ bool String::startsWith(const char* what, bool wordBreak) const
|
|||
return false;
|
||||
else if (wordBreak && (m_length > l) && !isWordBreak(m_string[l]))
|
||||
return false;
|
||||
|
||||
if (caseInsensitive)
|
||||
return (::strncasecmp(m_string,what,l) == 0);
|
||||
return (::strncmp(m_string,what,l) == 0);
|
||||
}
|
||||
|
||||
bool String::startSkip(const char* what, bool wordBreak)
|
||||
bool String::startSkip(const char* what, bool wordBreak, bool caseInsensitive)
|
||||
{
|
||||
if (startsWith(what,wordBreak)) {
|
||||
if (startsWith(what,wordBreak,caseInsensitive)) {
|
||||
const char *p = m_string + ::strlen(what);
|
||||
if (wordBreak)
|
||||
while (isWordBreak(*p))
|
||||
|
@ -666,7 +680,7 @@ bool String::startSkip(const char* what, bool wordBreak)
|
|||
return false;
|
||||
}
|
||||
|
||||
bool String::endsWith(const char* what, bool wordBreak) const
|
||||
bool String::endsWith(const char* what, bool wordBreak, bool caseInsensitive) const
|
||||
{
|
||||
if (!(m_string && what && *what))
|
||||
return false;
|
||||
|
@ -675,6 +689,8 @@ bool String::endsWith(const char* what, bool wordBreak) const
|
|||
return false;
|
||||
else if (wordBreak && (m_length > l) && !isWordBreak(m_string[m_length-l-1]))
|
||||
return false;
|
||||
if (caseInsensitive)
|
||||
return (::strncasecmp(m_string+m_length-l,what,l) == 0);
|
||||
return (::strncmp(m_string+m_length-l,what,l) == 0);
|
||||
}
|
||||
|
||||
|
|
28
yateclass.h
28
yateclass.h
|
@ -79,6 +79,10 @@ typedef unsigned long in_addr_t;
|
|||
#define strcasecmp _stricmp
|
||||
#endif
|
||||
|
||||
#ifndef strncasecmp
|
||||
#define strncasecmp _strnicmp
|
||||
#endif
|
||||
|
||||
#define vsnprintf _vsnprintf
|
||||
#define snprintf _snprintf
|
||||
#define strdup _strdup
|
||||
|
@ -1192,6 +1196,13 @@ public:
|
|||
*/
|
||||
int toInteger(const TokenDict* tokens, int defvalue = 0, int base = 0) const;
|
||||
|
||||
/**
|
||||
* Convert the string to a floating point value.
|
||||
* @param defvalue Default to return if the string is not a number
|
||||
* @return The floating-point interpretation or defvalue.
|
||||
*/
|
||||
double toDouble(double defvalue = 0.0) const;
|
||||
|
||||
/**
|
||||
* Convert the string to a boolean value.
|
||||
* @param defvalue Default to return if the string is not a bool
|
||||
|
@ -1426,17 +1437,19 @@ public:
|
|||
* Checks if the string starts with a substring
|
||||
* @param what Substring to search for
|
||||
* @param wordBreak Check if a word boundary follows the substring
|
||||
* @param caseInsensitive Compare case-insensitive if set
|
||||
* @return True if the substring occurs at the beginning of the string
|
||||
*/
|
||||
bool startsWith(const char* what, bool wordBreak = false) const;
|
||||
bool startsWith(const char* what, bool wordBreak = false, bool caseInsensitive = false) const;
|
||||
|
||||
/**
|
||||
* Checks if the string ends with a substring
|
||||
* @param what Substring to search for
|
||||
* @param wordBreak Check if a word boundary precedes the substring
|
||||
* @param caseInsensitive Compare case-insensitive if set
|
||||
* @return True if the substring occurs at the end of the string
|
||||
*/
|
||||
bool endsWith(const char* what, bool wordBreak = false) const;
|
||||
bool endsWith(const char* what, bool wordBreak = false, bool caseInsensitive = false) const;
|
||||
|
||||
/**
|
||||
* Checks if the string starts with a substring and removes it
|
||||
|
@ -1444,11 +1457,12 @@ public:
|
|||
* @param wordBreak Check if a word boundary follows the substring;
|
||||
* this parameter defaults to True because the intended use of this
|
||||
* method is to separate commands from their parameters
|
||||
* @param caseInsensitive Compare case-insensitive if set
|
||||
* @return True if the substring occurs at the beginning of the string
|
||||
* and also removes the substring; if wordBreak is True any word
|
||||
* breaking characters are also removed
|
||||
*/
|
||||
bool startSkip(const char* what, bool wordBreak = true);
|
||||
bool startSkip(const char* what, bool wordBreak = true, bool caseInsensitive = false);
|
||||
|
||||
/**
|
||||
* Checks if matches another string
|
||||
|
@ -2461,6 +2475,14 @@ public:
|
|||
*/
|
||||
int getIntValue(const String& name, const TokenDict* tokens, int defvalue = 0) const;
|
||||
|
||||
/**
|
||||
* Retrive the floating point value of a parameter.
|
||||
* @param name Name of parameter to locate
|
||||
* @param defvalue Default value to return if not found
|
||||
* @return The number contained in the named parameter or the default
|
||||
*/
|
||||
double getDoubleValue(const String& name, double defvalue = 0.0) const;
|
||||
|
||||
/**
|
||||
* Retrive the boolean value of a parameter.
|
||||
* @param name Name of parameter to locate
|
||||
|
|
|
@ -117,6 +117,15 @@ public:
|
|||
*/
|
||||
int getIntValue(const String& sect, const String& key, const TokenDict* tokens, int defvalue = 0) const;
|
||||
|
||||
/**
|
||||
* Retrive the floating point value of a key in a section.
|
||||
* @param sect Name of the section
|
||||
* @param key Name of the key in section
|
||||
* @param defvalue Default value to return if not found
|
||||
* @return The numeric value contained in the key or the default
|
||||
*/
|
||||
double getDoubleValue(const String& sect, const String& key, double defvalue = 0.0) const;
|
||||
|
||||
/**
|
||||
* Retrive the boolean value of a key in a section.
|
||||
* @param sect Name of the section
|
||||
|
|
Loading…
Reference in New Issue