mirror of
https://github.com/GothenburgBitFactory/taskwarrior.git
synced 2025-06-26 10:54:26 +02:00
Variant
- Updated operator<= to handle trivial values.
This commit is contained in:
parent
7484b5a22f
commit
78a748e865
1 changed files with 54 additions and 20 deletions
|
@ -416,10 +416,15 @@ bool Variant::operator<= (const Variant& other) const
|
|||
case type_string:
|
||||
switch (right._type)
|
||||
{
|
||||
case type_unknown: throw std::string ("Cannot compare unknown type");
|
||||
case type_boolean: right.cast (type_string); return left._string <= right._string;
|
||||
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_unknown:
|
||||
throw std::string ("Cannot compare unknown type");
|
||||
|
||||
case type_boolean:
|
||||
case type_integer:
|
||||
case type_real:
|
||||
right.cast (type_string);
|
||||
return left._string <= right._string;
|
||||
|
||||
case type_string:
|
||||
if (left.source () == "priority" || right.source () == "priority")
|
||||
{
|
||||
|
@ -431,36 +436,65 @@ bool Variant::operator<= (const Variant& other) const
|
|||
}
|
||||
else
|
||||
{
|
||||
if (left.trivial () || right.trivial ())
|
||||
return false;
|
||||
|
||||
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;
|
||||
|
||||
case type_date:
|
||||
if (left.trivial () || right.trivial ())
|
||||
return false;
|
||||
|
||||
left.cast (type_date);
|
||||
return left._date <= right._date;
|
||||
|
||||
case type_duration:
|
||||
if (left.trivial () || right.trivial ())
|
||||
return false;
|
||||
|
||||
left.cast (type_duration);
|
||||
return left._duration <= right._duration;
|
||||
}
|
||||
break;
|
||||
|
||||
case type_date:
|
||||
switch (right._type)
|
||||
{
|
||||
case type_unknown: throw std::string ("Cannot compare unknown type");
|
||||
case type_boolean: right.cast (type_date); return left._date <= right._date;
|
||||
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_string: right.cast (type_date); return left._date <= right._date;
|
||||
case type_date: return left._date <= right._date;
|
||||
case type_duration: return left._date <= right._duration;
|
||||
case type_unknown:
|
||||
throw std::string ("Cannot compare unknown type");
|
||||
|
||||
case type_boolean:
|
||||
case type_integer:
|
||||
case type_real:
|
||||
case type_string:
|
||||
case type_date:
|
||||
case type_duration:
|
||||
if (left.trivial () || right.trivial ())
|
||||
return false;
|
||||
|
||||
right.cast (type_date);
|
||||
return left._date <= right._date;
|
||||
}
|
||||
break;
|
||||
|
||||
case type_duration:
|
||||
switch (right._type)
|
||||
{
|
||||
case type_unknown: throw std::string ("Cannot compare unknown type");
|
||||
case type_boolean: right.cast (type_duration); return left._duration <= right._duration;
|
||||
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_string: right.cast (type_duration); return left._duration <= right._duration;
|
||||
case type_date: return left._duration <= right._date;
|
||||
case type_duration: return left._duration <= right._duration;
|
||||
case type_unknown:
|
||||
throw std::string ("Cannot compare unknown type");
|
||||
|
||||
case type_boolean:
|
||||
case type_integer:
|
||||
case type_real:
|
||||
case type_string:
|
||||
case type_date:
|
||||
case type_duration:
|
||||
if (left.trivial () || right.trivial ())
|
||||
return false;
|
||||
|
||||
right.cast (type_duration);
|
||||
return left._duration <= right._duration;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue