MCPcopy Create free account
hub / github.com/Icinga/icinga2 / operator-

Method operator-

lib/base/value-operators.cpp:258–296  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

256}
257
258Value icinga::operator-(const Value& lhs, const Value& rhs)
259{
260 if ((lhs.IsNumber() || lhs.IsEmpty()) && !lhs.IsString() && (rhs.IsNumber() || rhs.IsEmpty()) && !rhs.IsString() && !(lhs.IsEmpty() && rhs.IsEmpty()))
261 return static_cast<double>(lhs) - static_cast<double>(rhs);
262 else if (lhs.IsObjectType<DateTime>() && rhs.IsNumber())
263 return new DateTime(Convert::ToDateTimeValue(lhs) - rhs);
264 else if (lhs.IsObjectType<DateTime>() && rhs.IsObjectType<DateTime>())
265 return Convert::ToDateTimeValue(lhs) - Convert::ToDateTimeValue(rhs);
266 else if ((lhs.IsObjectType<DateTime>() || lhs.IsEmpty()) && (rhs.IsObjectType<DateTime>() || rhs.IsEmpty()) && !(lhs.IsEmpty() && rhs.IsEmpty()))
267 return new DateTime(Convert::ToDateTimeValue(lhs) - Convert::ToDateTimeValue(rhs));
268 else if ((lhs.IsObjectType<Array>() || lhs.IsEmpty()) && (rhs.IsObjectType<Array>() || rhs.IsEmpty()) && !(lhs.IsEmpty() && rhs.IsEmpty())) {
269 if (lhs.IsEmpty())
270 return new Array();
271
272 ArrayData result;
273 Array::Ptr left = lhs;
274 Array::Ptr right = rhs;
275
276 ObjectLock olock(left);
277 for (const Value& lv : left) {
278 bool found = false;
279 ObjectLock xlock(right);
280 for (const Value& rv : right) {
281 if (lv == rv) {
282 found = true;
283 break;
284 }
285 }
286
287 if (found)
288 continue;
289
290 result.push_back(lv);
291 }
292
293 return new Array(std::move(result));
294 } else
295 BOOST_THROW_EXCEPTION(std::invalid_argument("Operator - cannot be applied to values of type '" + lhs.GetTypeName() + "' and '" + rhs.GetTypeName() + "'"));
296}
297
298Value icinga::operator-(const Value& lhs, double rhs)
299{

Callers

nothing calls this directly

Calls 6

IsNumberMethod · 0.80
IsStringMethod · 0.80
push_backMethod · 0.80
ValueClass · 0.70
IsEmptyMethod · 0.45
GetTypeNameMethod · 0.45

Tested by

no test coverage detected