diff options
Diffstat (limited to 'src/components/smart_objects/include/smart_objects/number_schema_item.h')
-rw-r--r-- | src/components/smart_objects/include/smart_objects/number_schema_item.h | 88 |
1 files changed, 46 insertions, 42 deletions
diff --git a/src/components/smart_objects/include/smart_objects/number_schema_item.h b/src/components/smart_objects/include/smart_objects/number_schema_item.h index fb4d287fe4..01d6c08daa 100644 --- a/src/components/smart_objects/include/smart_objects/number_schema_item.h +++ b/src/components/smart_objects/include/smart_objects/number_schema_item.h @@ -34,10 +34,11 @@ #define SRC_COMPONENTS_SMART_OBJECTS_INCLUDE_SMART_OBJECTS_NUMBER_SCHEMA_ITEM_H_ #include <typeinfo> - +#include <limits> #include "utils/shared_ptr.h" #include "smart_objects/default_shema_item.h" #include "smart_objects/schema_item_parameter.h" +#include "utils/convert_utils.h" namespace NsSmartDeviceLink { namespace NsSmartObjects { @@ -45,7 +46,7 @@ namespace NsSmartObjects { * @brief Number schema item. * @tparam NumberType Number type. **/ -template<typename NumberType> +template <typename NumberType> class TNumberSchemaItem : public CDefaultSchemaItem<NumberType> { public: /** @@ -56,10 +57,12 @@ class TNumberSchemaItem : public CDefaultSchemaItem<NumberType> { * @return Shared pointer to a new schema item. **/ static utils::SharedPtr<TNumberSchemaItem> create( - const TSchemaItemParameter<NumberType>& MinValue = TSchemaItemParameter <NumberType > (), - const TSchemaItemParameter<NumberType>& MaxValue = TSchemaItemParameter <NumberType > (), - const TSchemaItemParameter<NumberType>& DefaultValue = - TSchemaItemParameter<NumberType>()); + const TSchemaItemParameter<NumberType>& MinValue = + TSchemaItemParameter<NumberType>(), + const TSchemaItemParameter<NumberType>& MaxValue = + TSchemaItemParameter<NumberType>(), + const TSchemaItemParameter<NumberType>& DefaultValue = + TSchemaItemParameter<NumberType>()); /** * @brief Validate smart object. @@ -98,45 +101,47 @@ class TNumberSchemaItem : public CDefaultSchemaItem<NumberType> { DISALLOW_COPY_AND_ASSIGN(TNumberSchemaItem); }; -template<typename NumberType> -utils::SharedPtr<TNumberSchemaItem<NumberType> > -TNumberSchemaItem<NumberType>::create( - const TSchemaItemParameter<NumberType>& MinValue, - const TSchemaItemParameter<NumberType>& MaxValue, - const TSchemaItemParameter<NumberType>& DefaultValue) { +template <typename NumberType> +utils::SharedPtr<TNumberSchemaItem<NumberType> > TNumberSchemaItem< + NumberType>::create(const TSchemaItemParameter<NumberType>& MinValue, + const TSchemaItemParameter<NumberType>& MaxValue, + const TSchemaItemParameter<NumberType>& DefaultValue) { return new TNumberSchemaItem<NumberType>(MinValue, MaxValue, DefaultValue); } -template<typename NumberType> +template <typename NumberType> bool TNumberSchemaItem<NumberType>::isValidNumberType(SmartType type) { NumberType value(0); - if ((SmartType_Double == type) && - (typeid(double) == typeid(value))) { - return true; + if ((SmartType_Double == type) && (typeid(double) == typeid(value))) { + return true; } else if ((SmartType_Integer == type) && - (typeid(int32_t) == typeid(value) || - typeid(uint32_t) == typeid(value) || - typeid(int64_t) == typeid(value))) { - return true; + (typeid(int32_t) == typeid(value) || + typeid(uint32_t) == typeid(value) || + typeid(int64_t) == typeid(value) || + typeid(double) == typeid(value))) { + return true; } else { - return false; + return false; } } -template<typename NumberType> -Errors::eType TNumberSchemaItem<NumberType>::validate(const SmartObject& Object) { +template <typename NumberType> +Errors::eType TNumberSchemaItem<NumberType>::validate( + const SmartObject& Object) { if (!isValidNumberType(Object.getType())) { return Errors::INVALID_VALUE; } NumberType value(0); if (typeid(int32_t) == typeid(value)) { - value = Object.asInt(); + value = utils::SafeStaticCast<int64_t, int32_t>(Object.asInt()); } else if (typeid(uint32_t) == typeid(value)) { - value = Object.asUInt(); + value = utils::SafeStaticCast<uint64_t, uint32_t>(Object.asUInt()); } else if (typeid(double) == typeid(value)) { value = Object.asDouble(); } else if (typeid(int64_t) == typeid(value)) { - value = Object.asInt64(); + value = Object.asInt(); + } else if (typeid(uint64_t) == typeid(value)) { + value = Object.asUInt(); } else { NOTREACHED(); } @@ -152,17 +157,16 @@ Errors::eType TNumberSchemaItem<NumberType>::validate(const SmartObject& Object) return Errors::OK; } -template<typename NumberType> +template <typename NumberType> TNumberSchemaItem<NumberType>::TNumberSchemaItem( - const TSchemaItemParameter<NumberType>& MinValue, - const TSchemaItemParameter<NumberType>& MaxValue, - const TSchemaItemParameter<NumberType>& DefaultValue) - : CDefaultSchemaItem<NumberType>(DefaultValue), - mMinValue(MinValue), - mMaxValue(MaxValue) { -} - -template<typename NumberType> + const TSchemaItemParameter<NumberType>& MinValue, + const TSchemaItemParameter<NumberType>& MaxValue, + const TSchemaItemParameter<NumberType>& DefaultValue) + : CDefaultSchemaItem<NumberType>(DefaultValue) + , mMinValue(MinValue) + , mMaxValue(MaxValue) {} + +template <typename NumberType> NumberType TNumberSchemaItem<NumberType>::getDefaultValue() const { return NumberType(0); } @@ -171,21 +175,21 @@ NumberType TNumberSchemaItem<NumberType>::getDefaultValue() const { * @brief Specialization of getSmartType for number types. * @return SmartType. **/ -template<typename NumberType> +template <typename NumberType> SmartType TNumberSchemaItem<NumberType>::getSmartType() const { DCHECK(!"Wrong type of template class"); return SmartType_Invalid; } -template<> +template <> SmartType TNumberSchemaItem<int32_t>::getSmartType() const; -template<> +template <> SmartType TNumberSchemaItem<uint32_t>::getSmartType() const; -template<> -SmartType TNumberSchemaItem<uint32_t>::getSmartType() const; +template <> +SmartType TNumberSchemaItem<int64_t>::getSmartType() const; -template<> +template <> SmartType TNumberSchemaItem<double>::getSmartType() const; } // namespace NsSmartObjects |