{
namespace Service
{
+ /**
+ * This RCSByteString the one of RCSResourceAttributes value for Byte String (Binary).
+ *
+ * It provides similar usage to c++ standard vector.<br/>
+ * 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<uint8_t> DataType;
+
+ /**
+ * Returns a vector<uint8_t> type of byte string.
+ *
+ * @return A stored byte string with std::vector<uint8_t>
+ */
+ DataType getByteString() const
+ {
+ return {m_data};
+ }
+
+ /**
+ * Returns a size of stored vector<uint8_t>.
+ *
+ * @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.
* @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 > >,
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 >
class KeyValueVisitorHelper: public boost::static_visitor< >
{
public:
- KeyValueVisitorHelper(VISITOR& visitor) noexcept :
+ KeyValueVisitorHelper(VISITOR& visitor) BOOST_NOEXCEPT :
m_visitor( visitor )
{
}
DOUBLE, /**< double */
BOOL, /**< bool */
STRING, /**< std::string */
+ BYTESTRING, /**< RCSByteString */
ATTRIBUTES, /**< RCSResourceAttributes */
VECTOR /**< std::vector */
};
*
* @see getBaseTypeId
*/
- TypeId getId() const noexcept;
+ TypeId getId() const BOOST_NOEXCEPT;
/**
* Returns the type identifier of a base type of sequence.
* @see getDepth
* @see getId
*/
- static TypeId getBaseTypeId(const Type& t) noexcept;
+ static TypeId getBaseTypeId(const Type& t) BOOST_NOEXCEPT;
/**
* Returns the depth of a type.
*
* @see getBaseTypeId
*/
- static size_t getDepth(const Type& t) noexcept;
+ static size_t getDepth(const Type& t) BOOST_NOEXCEPT;
/**
* Factory method to create Type instance from T.
* @see is_supported_type
*/
template < typename T >
- constexpr static Type typeOf(const T&) noexcept
+ constexpr static Type typeOf(const T&) BOOST_NOEXCEPT
{
return Type{ IndexOfType< T >::value };
}
* @see is_supported_type
*/
template < typename T >
- constexpr static Type typeOf() noexcept
+ constexpr static Type typeOf() BOOST_NOEXCEPT
{
return Type{ IndexOfType< T >::value };
}
//! @cond
- friend bool operator==(const Type&, const Type&) noexcept;
+ friend bool operator==(const Type&, const Type&) BOOST_NOEXCEPT;
//! @endcond
private:
- constexpr explicit Type(int which) noexcept :
+ constexpr explicit Type(int which) BOOST_NOEXCEPT :
m_which{ which }
{
}
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::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
Value();
Value(const Value&);
- Value(Value&&) noexcept;
+ Value(Value&&) BOOST_NOEXCEPT;
/**
* Constructs a Value if T is a supported type.<br/>
/**
* Exchanges the content of the object by the content of the parameter.
*/
- void swap(Value&) noexcept;
+ void swap(Value&) BOOST_NOEXCEPT;
//! @cond
friend class RCSResourceAttributes;
{
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&)
{
}
}
+#ifdef __APPLE__
+ public:
+#else
private:
+#endif
boost::scoped_ptr< ValueVariant > m_data;
};
/**
* Returns an {@link iterator} referring to the first element.
*/
- iterator begin() noexcept;
+ iterator begin() BOOST_NOEXCEPT;
/**
* Returns an {@link iterator} referring to the <i>past-the-end element</i>.
*/
- iterator end() noexcept;
+ iterator end() BOOST_NOEXCEPT;
/**
* @copydoc cbegin()
*/
- const_iterator begin() const noexcept;
+ const_iterator begin() const BOOST_NOEXCEPT;
/**
* @copydoc cend()
*/
- const_iterator end() const noexcept;
+ const_iterator end() const BOOST_NOEXCEPT;
/**
* Returns a const_iterator referring to the first element.
*/
- const_iterator cbegin() const noexcept;
+ const_iterator cbegin() const BOOST_NOEXCEPT;
/**
* Returns a const_iterator referring to the <i>past-the-end element</i>.
*/
- const_iterator cend() const noexcept;
+ const_iterator cend() const BOOST_NOEXCEPT;
/**
* Accesses a value.
/**
* Removes all elements.
*/
- void clear() noexcept;
+ void clear() BOOST_NOEXCEPT;
/**
* Removes a single element.
*
* @see size
*/
- bool empty() const noexcept;
+ bool empty() const BOOST_NOEXCEPT;
/**
* Returns the number of elements.
*
* @see empty
*/
- size_t size() const noexcept;
+ size_t size() const BOOST_NOEXCEPT;
private:
template< typename VISITOR >
boost::apply_visitor(helper, key, *i.second.m_data);
}
}
-
+#ifdef __APPLE__
+ public:
+#else
private:
+#endif
std::unordered_map< std::string, Value > m_values;
//! @cond
* @return true if the objects are equal, false otherwise.
*/
bool operator==(const RCSResourceAttributes::Type&, const RCSResourceAttributes::Type&)
- noexcept;
+ BOOST_NOEXCEPT;
/**
* @relates RCSResourceAttributes::Type
* @return true if the objects are not equal, false otherwise.
*/
bool operator!=(const RCSResourceAttributes::Type&, const RCSResourceAttributes::Type&)
- noexcept;
+ BOOST_NOEXCEPT;
/**
* @relates RCSResourceAttributes::Value
class KeyVisitor: public boost::static_visitor< const std::string& >
{
public:
- result_type operator()(iterator*) const noexcept;
- result_type operator()(const_iterator*) const noexcept;
+ result_type operator()(iterator*) const BOOST_NOEXCEPT;
+ result_type operator()(const_iterator*) const BOOST_NOEXCEPT;
};
class ValueVisitor: public boost::static_visitor< Value& >
{
public:
- result_type operator()(iterator*) noexcept;
+ result_type operator()(iterator*) BOOST_NOEXCEPT;
result_type operator()(const_iterator*);
};
class ConstValueVisitor: public boost::static_visitor< const Value& >
{
public:
- result_type operator()(iterator*) const noexcept;
- result_type operator()(const_iterator*) const noexcept;
+ result_type operator()(iterator*) const BOOST_NOEXCEPT;
+ result_type operator()(const_iterator*) const BOOST_NOEXCEPT;
};
public:
- const std::string& key() const noexcept;
- const RCSResourceAttributes::Value& value() const noexcept;
+ const std::string& key() const BOOST_NOEXCEPT;
+ const RCSResourceAttributes::Value& value() const BOOST_NOEXCEPT;
RCSResourceAttributes::Value& value();
private:
KeyValuePair(const KeyValuePair&) = default;
- KeyValuePair(boost::variant< iterator*, const_iterator* >&&) noexcept;
+ KeyValuePair(boost::variant< iterator*, const_iterator* >&&) BOOST_NOEXCEPT;
KeyValuePair& operator=(const KeyValuePair&) = default;