| 237 | |
| 238 | template <typename T> |
| 239 | T asIntegral(const ResourceManager* resources) const { |
| 240 | static_assert(is_integral<T>::value, "T must be an integral type"); |
| 241 | #if ARDUINOJSON_USE_EXTENSIONS |
| 242 | auto extension = getExtension(resources); |
| 243 | #else |
| 244 | (void)resources; // silence warning |
| 245 | #endif |
| 246 | const char* str = nullptr; |
| 247 | switch (type_) { |
| 248 | case VariantType::Boolean: |
| 249 | return content_.asBoolean; |
| 250 | case VariantType::Uint32: |
| 251 | return convertNumber<T>(content_.asUint32); |
| 252 | case VariantType::Int32: |
| 253 | return convertNumber<T>(content_.asInt32); |
| 254 | #if ARDUINOJSON_USE_LONG_LONG |
| 255 | case VariantType::Uint64: |
| 256 | return convertNumber<T>(extension->asUint64); |
| 257 | case VariantType::Int64: |
| 258 | return convertNumber<T>(extension->asInt64); |
| 259 | #endif |
| 260 | case VariantType::TinyString: |
| 261 | str = content_.asTinyString; |
| 262 | break; |
| 263 | case VariantType::LinkedString: |
| 264 | str = content_.asLinkedString; |
| 265 | break; |
| 266 | case VariantType::OwnedString: |
| 267 | str = content_.asOwnedString->data; |
| 268 | break; |
| 269 | case VariantType::Float: |
| 270 | return convertNumber<T>(content_.asFloat); |
| 271 | #if ARDUINOJSON_USE_DOUBLE |
| 272 | case VariantType::Double: |
| 273 | return convertNumber<T>(extension->asDouble); |
| 274 | #endif |
| 275 | default: |
| 276 | return 0; |
| 277 | } |
| 278 | |
| 279 | ARDUINOJSON_ASSERT(str != nullptr); |
| 280 | return parseNumber<T>(str); |
| 281 | } |
| 282 | |
| 283 | ObjectData* asObject() { |
| 284 | return isObject() ? &content_.asObject : 0; |
nothing calls this directly
no outgoing calls
no test coverage detected