The complete source code of IdealIRC
http://www.idealirc.org/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
1.6 KiB
77 lines
1.6 KiB
#include "ValueExtract.h"
|
|
|
|
namespace {
|
|
std::string emptyString;
|
|
ValueArray emptyArray;
|
|
}
|
|
|
|
ValueExtract::ValueExtract(ValueHolder& val)
|
|
: value(val)
|
|
{}
|
|
|
|
bool ValueExtract::isVoid() const
|
|
{
|
|
return value.getType() == ValueHolder::Type::Void;
|
|
}
|
|
|
|
int ValueExtract::toInt() const
|
|
{
|
|
if (value.getType() == ValueHolder::Type::Integer)
|
|
return std::get<int>(*value.mval());
|
|
|
|
if (value.getType() == ValueHolder::Type::Real)
|
|
return static_cast<int>(std::get<double>(*value.mval()));
|
|
|
|
if (value.getType() == ValueHolder::Type::Bool)
|
|
return std::get<bool>(*value.mval());
|
|
|
|
return 0;
|
|
}
|
|
|
|
double ValueExtract::toReal() const
|
|
{
|
|
if (value.getType() == ValueHolder::Type::Integer)
|
|
return std::get<int>(*value.mval());
|
|
|
|
if (value.getType() == ValueHolder::Type::Real)
|
|
return std::get<double>(*value.mval());
|
|
|
|
if (value.getType() == ValueHolder::Type::Bool)
|
|
return std::get<bool>(*value.mval());
|
|
|
|
return 0;
|
|
}
|
|
|
|
bool ValueExtract::toBool() const
|
|
{
|
|
if (value.getType() == ValueHolder::Type::Integer)
|
|
return std::get<int>(*value.mval()) != 0;
|
|
|
|
if (value.getType() == ValueHolder::Type::Real) {
|
|
auto v = std::get<double>(*value.mval());
|
|
return (v < 0) || (v > 0); // TODO use some epsilon value instead
|
|
}
|
|
|
|
if (value.getType() == ValueHolder::Type::Bool)
|
|
return std::get<bool>(*value.mval());
|
|
|
|
return false;
|
|
}
|
|
|
|
std::string& ValueExtract::toString()
|
|
{
|
|
if (value.getType() == ValueHolder::Type::String)
|
|
return std::get<std::string>(*value.mval());
|
|
|
|
emptyString.clear();
|
|
return emptyString;
|
|
}
|
|
|
|
ValueArray& ValueExtract::toMap()
|
|
{
|
|
if (value.getType() == ValueHolder::Type::Map)
|
|
return std::get<ValueArray>(*value.mval());
|
|
|
|
emptyArray.clear();
|
|
return emptyArray;
|
|
}
|
|
|