X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=service%2Fresource-encapsulation%2Finclude%2FRCSResourceAttributes.h;h=99d29bf5da62665ec1fca2d0ba72716332549e35;hb=3c093548382bb2542c87a67e6e5fa32552c29cb3;hp=6fcff2116d3ecae56d48dfbe1f62ac1944d728ea;hpb=edcfc3d2329da7b914771c0dcff5f42c9b74fd93;p=platform%2Fupstream%2Fiotivity.git diff --git a/service/resource-encapsulation/include/RCSResourceAttributes.h b/service/resource-encapsulation/include/RCSResourceAttributes.h index 6fcff21..99d29bf 100644 --- a/service/resource-encapsulation/include/RCSResourceAttributes.h +++ b/service/resource-encapsulation/include/RCSResourceAttributes.h @@ -49,6 +49,166 @@ namespace OIC { namespace Service { + /** + * This RCSByteString the one of RCSResourceAttributes value for Byte String (Binary). + * + * It provides similar usage to c++ standard vector.
+ * An RCSByteString can be one of various attribute value type. + * + * @see Value + * @see Type + * @see RCSRemoteResourceObject + * @see RCSResourceObject + * @see RCSResourceAttributes + */ + class RCSByteString + { + public: + typedef std::vector DataType; + + /** + * Returns a vector type of byte string. + * + * @return A stored byte string with std::vector + */ + DataType getByteString() const + { + return {m_data}; + } + + /** + * Returns a size of stored vector. + * + * @return A size of stored byte string. + */ + size_t size() const + { + return m_data.size(); + } + + /** + * @relates RCSByteString + * + * Checks if the byte string is same contents, or not. + * + * @return true if the byte string are equal, false otherwise. + */ + inline bool operator==(const RCSByteString& rhs) const + { + return this->m_data == rhs.getByteString(); + } + + /** + * @relates RCSByteString + * + * Checks if the byte string is not same contents, or is same. + * + * @return true if the byte string are not equal, false otherwise. + */ + inline bool operator!=(const RCSByteString& rhs) const + { + return this->m_data != rhs.getByteString(); + } + + /** + * Return a value of indexed byte string. + * + * @param it location of the element. + * + * @return A copied value of indexed byte string. + */ + inline uint8_t operator[](size_t it) const + { + return this->m_data[it]; + } + + RCSByteString() + { + } + RCSByteString(DataType && rhs) + : m_data {std::move(rhs)} + { + } + RCSByteString(const DataType & rhs) + : m_data {rhs} + { + } + RCSByteString(RCSByteString && rhs) + : m_data {DataType{rhs.getByteString()}} + { + } + RCSByteString(const RCSByteString & rhs) + : m_data {DataType{rhs.getByteString()}} + { + } + + RCSByteString(::OCByteString && rhs) + : m_data {DataType{rhs.bytes, rhs.bytes + rhs.len}} + { + } + RCSByteString(const ::OCByteString & rhs) + : m_data {DataType{rhs.bytes, rhs.bytes + rhs.len}} + { + } + + RCSByteString(uint8_t* bytes, size_t size) + : m_data {DataType{bytes, bytes + size}} + { + } + inline RCSByteString& operator=(RCSByteString&& rhs) + { + return operator =(rhs); + } + inline RCSByteString& operator=(const RCSByteString& rhs) + { + if (!m_data.empty()) + { + m_data.clear(); + } + m_data = DataType{rhs.getByteString()}; + return *this; + } + private: + DataType m_data; + }; + +#ifdef __APPLE__ + class RCSResourceAttributes; + typedef boost::variant< + std::nullptr_t, + int, + double, + bool, + std::string, + RCSByteString, + RCSResourceAttributes, + + std::vector< int >, + std::vector< double >, + std::vector< bool >, + std::vector< std::string >, + std::vector< RCSByteString >, + std::vector< RCSResourceAttributes >, + + std::vector< std::vector< int > >, + std::vector< std::vector< std::vector< int > > >, + + std::vector< std::vector< double > >, + std::vector< std::vector< std::vector< double > > >, + + std::vector< std::vector< bool > >, + std::vector< std::vector< std::vector< bool > > >, + + std::vector< std::vector< std::string > >, + std::vector< std::vector< std::vector< std::string > > >, + + std::vector< std::vector< RCSByteString > >, + std::vector< std::vector< std::vector< RCSByteString > > >, + + std::vector< std::vector< RCSResourceAttributes > >, + std::vector< std::vector< std::vector< RCSResourceAttributes > > > + > ValueVariant; +#endif /** * This represents the attributes for a resource. @@ -65,24 +225,27 @@ namespace OIC * @see RCSDiscoveryManager * @see RCSRemoteResourceObject * @see RCSResourceObject + * @see RCSByteString */ class RCSResourceAttributes { private: template< typename T > struct IsSupportedTypeHelper; - +#ifndef __APPLE__ typedef boost::variant< std::nullptr_t, int, double, bool, std::string, + RCSByteString, RCSResourceAttributes, std::vector< int >, std::vector< double >, std::vector< bool >, std::vector< std::string >, + std::vector< RCSByteString >, std::vector< RCSResourceAttributes >, std::vector< std::vector< int > >, @@ -97,10 +260,13 @@ namespace OIC std::vector< std::vector< std::string > >, std::vector< std::vector< std::vector< std::string > > >, + std::vector< std::vector< RCSByteString > >, + std::vector< std::vector< std::vector< RCSByteString > > >, + std::vector< std::vector< RCSResourceAttributes > >, std::vector< std::vector< std::vector< RCSResourceAttributes > > > > ValueVariant; - +#endif template< typename T, typename V = void, typename = typename std::enable_if< IsSupportedTypeHelper< T >::type::value, V >::type > @@ -159,6 +325,7 @@ namespace OIC DOUBLE, /**< double */ BOOL, /**< bool */ STRING, /**< std::string */ + BYTESTRING, /**< RCSByteString */ ATTRIBUTES, /**< RCSResourceAttributes */ VECTOR /**< std::vector */ }; @@ -264,12 +431,14 @@ namespace OIC double bool std::string + RCSByteString RCSResourceAttributes std::vector< int > std::vector< double > std::vector< bool > std::vector< std::string > + std::vector< RCSByteString > std::vector< RCSResourceAttributes > std::vector< std::vector< int > > @@ -284,6 +453,9 @@ namespace OIC std::vector< std::vector< std::string > > std::vector< std::vector< std::vector< std::string > > > + std::vector< std::vector< RCSByteString > > + std::vector< std::vector< std::vector< RCSByteString > > > + std::vector< std::vector< RCSResourceAttributes > > std::vector< std::vector< std::vector< RCSResourceAttributes > > > * @endcode @@ -380,7 +552,14 @@ namespace OIC { try { - return boost::get< T >(*m_data); + if ((*m_data).type() == typeid(T)) + { + return boost::get< T >(*m_data); + } + else + { + throw RCSBadGetException{ "Wrong type" }; + } } catch (const boost::bad_get&) { @@ -401,7 +580,11 @@ namespace OIC } } +#ifdef __APPLE__ + public: +#else private: +#endif boost::scoped_ptr< ValueVariant > m_data; }; @@ -586,8 +769,11 @@ namespace OIC boost::apply_visitor(helper, key, *i.second.m_data); } } - +#ifdef __APPLE__ + public: +#else private: +#endif std::unordered_map< std::string, Value > m_values; //! @cond