mirror of https://github.com/Icinga/icinga2.git
Implement additional operators for the Value and String classes.
Refs #2710
This commit is contained in:
parent
e93d3f4c61
commit
038be974e4
|
@ -18,6 +18,7 @@
|
|||
******************************************************************************/
|
||||
|
||||
#include "base/qstring.h"
|
||||
#include "base/value.h"
|
||||
#include <boost/algorithm/string/trim.hpp>
|
||||
#include <boost/algorithm/string/join.hpp>
|
||||
#include <boost/algorithm/string/compare.hpp>
|
||||
|
@ -86,6 +87,12 @@ String& String::operator+=(const char *rhs)
|
|||
return *this;
|
||||
}
|
||||
|
||||
String& String::operator+=(const Value& rhs)
|
||||
{
|
||||
m_Data += static_cast<String>(rhs);
|
||||
return *this;
|
||||
}
|
||||
|
||||
String& String::operator+=(char rhs)
|
||||
{
|
||||
m_Data += rhs;
|
||||
|
|
|
@ -28,6 +28,8 @@
|
|||
|
||||
namespace icinga {
|
||||
|
||||
class Value;
|
||||
|
||||
/**
|
||||
* String class.
|
||||
*
|
||||
|
@ -64,6 +66,7 @@ public:
|
|||
|
||||
String& operator+=(const String& rhs);
|
||||
String& operator+=(const char *rhs);
|
||||
String& operator+=(const Value& rhs);
|
||||
String& operator+=(char rhs);
|
||||
|
||||
bool IsEmpty(void) const;
|
||||
|
|
|
@ -241,6 +241,77 @@ ValueType Value::GetType(void) const
|
|||
return static_cast<ValueType>(m_Value.which());
|
||||
}
|
||||
|
||||
bool Value::operator==(int rhs)
|
||||
{
|
||||
if (!IsScalar())
|
||||
return false;
|
||||
|
||||
return static_cast<double>(*this) == rhs;
|
||||
}
|
||||
|
||||
bool Value::operator!=(int rhs)
|
||||
{
|
||||
return !(*this == rhs);
|
||||
}
|
||||
|
||||
bool Value::operator==(double rhs)
|
||||
{
|
||||
if (!IsScalar())
|
||||
return false;
|
||||
|
||||
return static_cast<double>(*this) == rhs;
|
||||
}
|
||||
|
||||
bool Value::operator!=(double rhs)
|
||||
{
|
||||
return !(*this == rhs);
|
||||
}
|
||||
|
||||
bool Value::operator==(const char *rhs)
|
||||
{
|
||||
return static_cast<String>(*this) == rhs;
|
||||
}
|
||||
|
||||
bool Value::operator!=(const char *rhs)
|
||||
{
|
||||
return !(*this == rhs);
|
||||
}
|
||||
|
||||
bool Value::operator==(const String& rhs)
|
||||
{
|
||||
return static_cast<String>(*this) == rhs;
|
||||
}
|
||||
|
||||
bool Value::operator!=(const String& rhs)
|
||||
{
|
||||
return !(*this == rhs);
|
||||
}
|
||||
|
||||
bool Value::operator==(const Value& rhs)
|
||||
{
|
||||
if (IsEmpty() != rhs.IsEmpty())
|
||||
return false;
|
||||
|
||||
if (IsEmpty())
|
||||
return true;
|
||||
|
||||
if (IsObject() != rhs.IsObject())
|
||||
return false;
|
||||
|
||||
if (IsObject())
|
||||
return static_cast<Object::Ptr>(*this) == static_cast<Object::Ptr>(rhs);
|
||||
|
||||
if (GetType() == ValueNumber || rhs.GetType() == ValueNumber)
|
||||
return static_cast<double>(*this) == static_cast<double>(rhs);
|
||||
else
|
||||
return static_cast<String>(*this) == static_cast<String>(rhs);
|
||||
}
|
||||
|
||||
bool Value::operator!=(const Value& rhs)
|
||||
{
|
||||
return !(*this == rhs);
|
||||
}
|
||||
|
||||
Value icinga::operator+(const Value& lhs, const char *rhs)
|
||||
{
|
||||
return static_cast<String>(lhs) + rhs;
|
||||
|
@ -251,6 +322,16 @@ Value icinga::operator+(const char *lhs, const Value& rhs)
|
|||
return lhs + static_cast<String>(rhs);
|
||||
}
|
||||
|
||||
Value icinga::operator+(const Value& lhs, const String& rhs)
|
||||
{
|
||||
return static_cast<String>(lhs) + rhs;
|
||||
}
|
||||
|
||||
Value icinga::operator+(const String& lhs, const Value& rhs)
|
||||
{
|
||||
return lhs + static_cast<String>(rhs);
|
||||
}
|
||||
|
||||
std::ostream& icinga::operator<<(std::ostream& stream, const Value& value)
|
||||
{
|
||||
stream << static_cast<String>(value);
|
||||
|
|
|
@ -73,6 +73,21 @@ public:
|
|||
operator double(void) const;
|
||||
operator String(void) const;
|
||||
|
||||
bool operator==(int rhs);
|
||||
bool operator!=(int rhs);
|
||||
|
||||
bool operator==(double rhs);
|
||||
bool operator!=(double rhs);
|
||||
|
||||
bool operator==(const char *rhs);
|
||||
bool operator!=(const char *rhs);
|
||||
|
||||
bool operator==(const String& rhs);
|
||||
bool operator!=(const String& rhs);
|
||||
|
||||
bool operator==(const Value& rhs);
|
||||
bool operator!=(const Value& rhs);
|
||||
|
||||
template<typename T>
|
||||
operator shared_ptr<T>(void) const
|
||||
{
|
||||
|
@ -117,6 +132,9 @@ static Value Empty;
|
|||
I2_BASE_API Value operator+(const Value& lhs, const char *rhs);
|
||||
I2_BASE_API Value operator+(const char *lhs, const Value& rhs);
|
||||
|
||||
I2_BASE_API Value operator+(const Value& lhs, const String& rhs);
|
||||
I2_BASE_API Value operator+(const String& lhs, const Value& rhs);
|
||||
|
||||
I2_BASE_API std::ostream& operator<<(std::ostream& stream, const Value& value);
|
||||
I2_BASE_API std::istream& operator>>(std::istream& stream, Value& value);
|
||||
|
||||
|
|
Loading…
Reference in New Issue