replace : iotivity -> iotivity-sec
[platform/upstream/iotivity.git] / resource / include / OCRepresentation.h
index 5f2071a..f37ea45 100644 (file)
@@ -28,7 +28,6 @@
 #ifndef OC_REPRESENTATION_H_
 #define OC_REPRESENTATION_H_
 
-
 #include <string>
 #include <sstream>
 #include <vector>
@@ -62,10 +61,6 @@ namespace OC
         public:
             void setPayload(const OCPayload* rep);
 
-            void setPayload(const OCDevicePayload* rep);
-
-            void setPayload(const OCPlatformPayload* rep);
-
             void setPayload(const OCRepPayload* rep);
 
             OCRepPayload* getPayload() const;
@@ -99,17 +94,32 @@ namespace OC
             // this fix will work in the meantime.
             OCRepresentation(): m_interfaceType(InterfaceType::None){}
 
+#if defined(_MSC_VER) && (_MSC_VER < 1900)
+            OCRepresentation(OCRepresentation&& o)
+            {
+                std::memmove(this, &o, sizeof(o));
+            }
+#else
             OCRepresentation(OCRepresentation&&) = default;
+#endif
 
             OCRepresentation(const OCRepresentation&) = default;
 
             OCRepresentation& operator=(const OCRepresentation&) = default;
 
+#if defined(_MSC_VER) && (_MSC_VER < 1900)
+            OCRepresentation& operator=(OCRepresentation&& o)
+            {
+                std::memmove(this, &o, sizeof(o));
+                return *this;
+            }
+#else
             OCRepresentation& operator=(OCRepresentation&&) = default;
+#endif
 
             virtual ~OCRepresentation(){}
 
-            void setDevAddr(const OCDevAddr addr);
+            void setDevAddr(const OCDevAddr&);
 
             const std::string getHost() const;
 
@@ -131,6 +141,8 @@ namespace OC
 
             const std::vector<std::string>& getResourceTypes() const;
 
+            const std::vector<std::string>& getDataModelVersions() const;
+
             void setResourceTypes(const std::vector<std::string>& resourceTypes);
 
             void addResourceType(const std::string& str);
@@ -141,6 +153,8 @@ namespace OC
 
             void addResourceInterface(const std::string& str);
 
+            void addDataModelVersion(const std::string& str);
+
             bool emptyData() const;
 
             int numberOfAttributes() const;
@@ -160,6 +174,10 @@ namespace OC
                 m_values[str] = std::forward<T>(val);
             }
 
+            const std::map<std::string, AttributeValue>& getValues() const {
+                return m_values;
+            }
+
             /**
              *  Retrieve the attribute value associated with the supplied name
              *
@@ -177,8 +195,16 @@ namespace OC
                 {
                     try
                     {
-                        val = boost::get<T>(x->second);
-                        return true;
+                        if (x->second.type() == typeid(T))
+                        {
+                            val = boost::get<T>(x->second);
+                            return true;
+                        }
+                        else
+                        {
+                            val = T();
+                            return false;
+                        }
                     }
                     catch (boost::bad_get& e)
                     {
@@ -210,7 +236,14 @@ namespace OC
                 {
                     try
                     {
-                        val = boost::get<T>(x->second);
+                        if (x->second.type() == typeid(T))
+                        {
+                            val = boost::get<T>(x->second);
+                        }
+                        else
+                        {
+                            return val;
+                        }
                     }
                     catch (boost::bad_get& e)
                     {
@@ -272,15 +305,23 @@ namespace OC
                     template<typename T>
                     T getValue() const
                     {
+                        T val = T();
                         try
                         {
-                            return boost::get<T>(m_values[m_attrName]);
+                            if (m_values[m_attrName].type() == typeid(T))
+                            {
+                                val = boost::get<T>(m_values[m_attrName]);
+                            }
+                            else
+                            {
+                                return val;
+                            }
                         }
                         catch (boost::bad_get& e)
                         {
-                            T val = T();
                             return val;
                         }
+                        return val;
                     }
 
                     std::string getValueToString() const;
@@ -302,12 +343,42 @@ namespace OC
                     // Enable-if required to prevent conversions to alternate types.  This prevents
                     // ambigious conversions in the case where conversions can include a number of
                     // types, such as the string constructor.
+#if (defined(_MSC_VER) ) || (defined(__GNUC__) && (__GNUC__ <= 5))
+                    template<typename T, typename std::enable_if<
+                     std::is_same<T, int>::value ||
+                     std::is_same<T, double>::value ||
+                     std::is_same<T, bool>::value ||
+                     std::is_same<T, std::string>::value ||
+                     std::is_same<T, OCRepresentation>::value ||
+                     std::is_same<T, OCByteString>::value ||
+                     std::is_same<T, std::vector<int>>::value ||
+                     std::is_same<T, std::vector<std::vector<int>>>::value ||
+                     std::is_same<T, std::vector<std::vector<std::vector<int>>>>::value ||
+                     std::is_same<T, std::vector<double>>::value ||
+                     std::is_same<T, std::vector<std::vector<double>>>::value ||
+                     std::is_same<T, std::vector<std::vector<std::vector<double>>>>::value ||
+                     std::is_same<T, std::vector<bool>>::value ||
+                     std::is_same<T, std::vector<std::vector<bool>>>::value ||
+                     std::is_same<T, std::vector<std::vector<std::vector<bool>>>>::value ||
+                     std::is_same<T, std::vector<std::string>>::value ||
+                     std::is_same<T, std::vector<std::vector<std::string>>>::value ||
+                     std::is_same<T, std::vector<std::vector<std::vector<std::string>>>>::value ||
+                     std::is_same<T, std::vector<OCRepresentation>>::value ||
+                     std::is_same<T, std::vector<std::vector<OCRepresentation>>>::value ||
+                     std::is_same<T, std::vector<std::vector<std::vector<OCRepresentation>>>>::value ||
+                     std::is_same<T, std::vector<OCByteString>>::value ||
+                     std::is_same<T, std::vector<std::vector<OCByteString>>>::value ||
+                     std::is_same<T, std::vector<std::vector<std::vector<OCByteString>>>>::value
+                     , int>::type = 0// enable_if
+                    >
+#else
                     template<typename T, typename std::enable_if<
                         is_component<T,
                             remove_first<AttributeValue>::type
                             >::value
                         , int>::type = 0
                     >
+#endif
                     operator T() const
                     {
                         return this->getValue<T>();
@@ -452,6 +523,7 @@ namespace OC
             mutable std::map<std::string, AttributeValue> m_values;
             std::vector<std::string> m_resourceTypes;
             std::vector<std::string> m_interfaces;
+            std::vector<std::string> m_dataModelVersions;
 
             InterfaceType m_interfaceType;
     };
@@ -461,4 +533,3 @@ namespace OC
 
 
 #endif // OC_REPRESENTATION_H_
-