bool BaseSet::OffsetEmpty(ObjectData* obj, const TypedValue* key) { assert(key->m_type != KindOfRef); auto set = static_cast<BaseSet*>(obj); if (key->m_type == KindOfInt64) { return set->contains(key->m_data.num) ? !cellToBool(*key) : true; } if (isStringType(key->m_type)) { return set->contains(key->m_data.pstr) ? !cellToBool(*key) : true; } throwBadValueType(); return true; }
bool objOffsetEmpty(TypedValue& tvRef, ObjectData* base, const Variant& offset, bool validate /* = true */) { if (objOffsetExists(base, offset) == OffsetExistsResult::DoesNotExist) { return true; } TypedValue* result = objOffsetGet(tvRef, base, offset, false); assert(result); return !cellToBool(*tvToCell(result)); }
bool objOffsetEmpty(TypedValue& tvRef, ObjectData* base, CVarRef offset, bool validate /* = true */) { if (!objOffsetExists(base, offset)) { return true; } TypedValue* result = objOffsetGet(tvRef, base, offset, false); assert(result); return !cellToBool(*tvToCell(result)); }
bool BaseVector::OffsetEmpty(ObjectData* obj, TypedValue* key) { assert(key->m_type != KindOfRef); auto vec = static_cast<BaseVector*>(obj); TypedValue* result; if (key->m_type == KindOfInt64) { result = vec->get(key->m_data.num); } else { throwBadKeyType(); result = nullptr; } return result ? !cellToBool(*result) : true; }
bool objOffsetEmpty( ObjectData* base, TypedValue offset, bool validate /* = true */ ) { if (objOffsetExists(base, offset) == OffsetExistsResult::DoesNotExist) { return true; } auto value = objOffsetGet(base, offset, false); auto result = !cellToBool(*tvToCell(&value)); tvRefcountedDecRef(value); return result; }
bool BaseMap::OffsetEmpty(ObjectData* obj, const TypedValue* key) { assert(key->m_type != KindOfRef); auto map = static_cast<BaseMap*>(obj); TypedValue* result; if (key->m_type == KindOfInt64) { result = map->get(key->m_data.num); } else if (isStringType(key->m_type)) { result = map->get(key->m_data.pstr); } else { throwBadKeyType(); result = nullptr; } return result ? !cellToBool(*result) : true; }