- Updated operator== to handle trivial values.
This commit is contained in:
Paul Beckingham 2014-06-16 18:41:36 -04:00
parent 5e9229db76
commit c1a9e1e452

View file

@ -834,39 +834,59 @@ bool Variant::operator== (const Variant& other) const
case type_string: case type_string:
switch (right._type) switch (right._type)
{ {
case type_unknown: throw std::string ("Cannot equate unknown type"); case type_unknown:
case type_boolean: right.cast (type_string); return left._string == right._string; throw std::string ("Cannot equate unknown type");
case type_integer: right.cast (type_string); return left._string == right._string;
case type_real: right.cast (type_string); return left._string == right._string; case type_boolean:
case type_string: return left._string == right._string; case type_integer:
case type_date: left.cast (type_date); return left._date == right._date; case type_real:
case type_duration: left.cast (type_duration); return left._duration == right._duration; right.cast (type_string);
return left._string == right._string;
case type_string:
return left._string == right._string;
case type_date:
left.cast (type_date);
return left._date == right._date;
case type_duration:
left.cast (type_duration);
return left._duration == right._duration;
} }
break; break;
case type_date: case type_date:
switch (right._type) switch (right._type)
{ {
case type_unknown: throw std::string ("Cannot equate unknown type"); case type_unknown:
case type_boolean: right.cast (type_date); return left._date == right._date; throw std::string ("Cannot equate unknown type");
case type_integer: right.cast (type_date); return left._date == right._date;
case type_real: right.cast (type_date); return left._date == right._date; case type_boolean:
case type_string: right.cast (type_date); return left._date == right._date; case type_integer:
case type_date: return left._date == right._date; case type_real:
case type_duration: return left._date == right._duration; case type_string:
case type_date:
case type_duration:
right.cast (type_date);
return left._date == right._date;
} }
break; break;
case type_duration: case type_duration:
switch (right._type) switch (right._type)
{ {
case type_unknown: throw std::string ("Cannot equate unknown type"); case type_unknown:
case type_boolean: right.cast (type_duration); return left._duration == right._duration; throw std::string ("Cannot equate unknown type");
case type_integer: right.cast (type_duration); return left._duration == right._duration;
case type_real: right.cast (type_duration); return left._duration == right._duration; case type_boolean:
case type_string: right.cast (type_duration); return left._duration == right._duration; case type_integer:
case type_date: return left._duration == right._date; case type_real:
case type_duration: return left._duration == right._duration; case type_string:
case type_date:
case type_duration:
right.cast (type_duration);
return left._duration == right._duration;
} }
break; break;
} }