mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-05-03 20:46:28 +00:00
feat(Variant): add getValueAsNumber impl
This commit is contained in:
parent
84df0776a6
commit
fc861ade8a
3 changed files with 50 additions and 21 deletions
|
|
@ -70,11 +70,13 @@ namespace Utils {
|
|||
LINPHONE_PUBLIC std::string toString (const void *val);
|
||||
|
||||
LINPHONE_PUBLIC int stoi (const std::string &str, size_t *idx = 0, int base = 10);
|
||||
LINPHONE_PUBLIC long long stoll (const std::string &str, size_t *idx = 0, int base = 10);
|
||||
LINPHONE_PUBLIC double stod (const std::string &str, size_t *idx = 0);
|
||||
LINPHONE_PUBLIC float stof (const std::string &str, size_t *idx = 0);
|
||||
LINPHONE_PUBLIC bool stob (const std::string &str);
|
||||
|
||||
LINPHONE_PUBLIC int stoi (const char *str, size_t *idx = 0, int base = 10);
|
||||
LINPHONE_PUBLIC long long stoll (const char *str, size_t *idx = 0, int base = 10);
|
||||
LINPHONE_PUBLIC double stod (const char *str, size_t *idx = 0);
|
||||
LINPHONE_PUBLIC float stof (const char *str, size_t *idx = 0);
|
||||
|
||||
|
|
|
|||
|
|
@ -85,33 +85,19 @@ string Utils::toString (const void *val) {
|
|||
}
|
||||
|
||||
int Utils::stoi (const string &str, size_t *idx, int base) {
|
||||
char *p;
|
||||
int v = static_cast<int>(strtol(str.c_str(), &p, base));
|
||||
return stoi(str.c_str(), idx, base);
|
||||
}
|
||||
|
||||
if (idx)
|
||||
*idx = static_cast<size_t>(p - str.c_str());
|
||||
|
||||
return v;
|
||||
long long Utils::stoll (const string &str, size_t *idx, int base) {
|
||||
return stoll(str.c_str(), idx, base);
|
||||
}
|
||||
|
||||
double Utils::stod (const string &str, size_t *idx) {
|
||||
char *p;
|
||||
double v = strtod(str.c_str(), &p);
|
||||
|
||||
if (idx)
|
||||
*idx = static_cast<size_t>(p - str.c_str());
|
||||
|
||||
return v;
|
||||
return stod(str.c_str(), idx);
|
||||
}
|
||||
|
||||
float Utils::stof (const string &str, size_t *idx) {
|
||||
char *p;
|
||||
float v = strtof(str.c_str(), &p);
|
||||
|
||||
if (idx)
|
||||
*idx = static_cast<size_t>(p - str.c_str());
|
||||
|
||||
return v;
|
||||
return stof(str.c_str(), idx);
|
||||
}
|
||||
|
||||
bool Utils::stob (const string &str) {
|
||||
|
|
@ -129,6 +115,16 @@ int Utils::stoi (const char *str, size_t *idx, int base) {
|
|||
return v;
|
||||
}
|
||||
|
||||
long long Utils::stoll (const char *str, size_t *idx, int base) {
|
||||
char *p;
|
||||
long long v = static_cast<int>(strtoll(str, &p, base));
|
||||
|
||||
if (idx)
|
||||
*idx = static_cast<size_t>(p - str);
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
double Utils::stod (const char *str, size_t *idx) {
|
||||
char *p;
|
||||
double v = strtod(str, &p);
|
||||
|
|
|
|||
|
|
@ -315,7 +315,38 @@ static inline unsigned long long getAssumedUnsignedNumber (const VariantPrivate
|
|||
// -----------------------------------------------------------------------------
|
||||
|
||||
static inline long long getValueAsNumber (const VariantPrivate &p, bool *soFarSoGood) {
|
||||
// TODO.
|
||||
const int type = p.getType();
|
||||
L_ASSERT(type > Variant::Invalid && type < Variant::MaxDefaultTypes);
|
||||
|
||||
switch (static_cast<Variant::Type>(type)) {
|
||||
case Variant::Int:
|
||||
case Variant::Short:
|
||||
case Variant::Long:
|
||||
case Variant::LongLong:
|
||||
case Variant::Char:
|
||||
case Variant::Double:
|
||||
case Variant::Float:
|
||||
return getAssumedNumber(p);
|
||||
|
||||
case Variant::UnsignedInt:
|
||||
case Variant::UnsignedShort:
|
||||
case Variant::UnsignedLong:
|
||||
case Variant::UnsignedLongLong:
|
||||
return static_cast<long long>(getAssumedUnsignedNumber(p));
|
||||
|
||||
case Variant::Bool:
|
||||
return static_cast<long long>(p.value.b);
|
||||
|
||||
case Variant::String:
|
||||
return Utils::stoll(*p.value.str);
|
||||
|
||||
case Variant::Generic:
|
||||
return static_cast<long long>(!!p.value.g);
|
||||
|
||||
default:
|
||||
*soFarSoGood = false;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue