summaryrefslogtreecommitdiff
path: root/src/components/smart_objects/include/smart_objects/number_schema_item.h
diff options
context:
space:
mode:
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.h88
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