From 9dd4ddd23388d58b2093a2f59b62c3e14865a211 Mon Sep 17 00:00:00 2001 From: Sashi Penta Date: Fri, 26 Sep 2014 15:04:08 -0700 Subject: [PATCH] New APIs : hasAttribute, numberOfAttributes, erase in OCRepresentation. Change-Id: Ia6df616bdd73d7e73a34563896dd3c5d941b9a8b --- examples/garageclient.cpp | 31 +++++++++++++++++++++++++++++-- include/OCApi.h | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 2 deletions(-) diff --git a/examples/garageclient.cpp b/examples/garageclient.cpp index 08b98f0..813c06b 100644 --- a/examples/garageclient.cpp +++ b/examples/garageclient.cpp @@ -51,8 +51,35 @@ Garage myGarage; void printRepresentation(const OCRepresentation& rep) { - rep.getValue("state", myGarage.m_state); - rep.getValue("name", myGarage.m_name); + + // Check if attribute "name" exists, and then getValue + if(rep.hasAttribute("name")) + { + myGarage.m_name = rep.getValue("name"); + } + + // You can directly try to get the value. this function + // return false if there is no attribute "state" + if(!rep.getValue("state", myGarage.m_state)) + { + std::cout << "Attribute state doesn't exist in the representation\n"; + } + + + OCRepresentation rep2 = rep; + + std::cout << "Number of attributes in rep2: " + << rep2.numberOfAttributes() << std::endl; + + if(rep2.erase("name")) + { + std::cout << "attribute: name, was removed successfully from rep2.\n"; + } + + std::cout << "Number of attributes in rep2: " + << rep2.numberOfAttributes() << std::endl; + + rep.getValue("light", myGarage.m_lightRep); myGarage.m_lightRep.getValue("states", myGarage.m_lightStates); diff --git a/include/OCApi.h b/include/OCApi.h index 34a57af..a34d064 100644 --- a/include/OCApi.h +++ b/include/OCApi.h @@ -141,6 +141,11 @@ namespace OC public: OCRepresentation() {} + bool erase(const std::string& str) + { + return m_attributeMap.erase(str) != 0; + } + std::string getUri(void) const { return m_uri; @@ -152,6 +157,19 @@ namespace OC template bool getValue(const std::string& str, T& val) const; + template + T getValue(const std::string& str) const; + + bool hasAttribute(const std::string& str) const + { + return m_attributeMap.find(str) != m_attributeMap.end(); + } + + int numberOfAttributes() const + { + return m_attributeMap.size(); + } + void setUri(std::string uri) { m_uri = uri; @@ -525,6 +543,22 @@ namespace OC m_attributeMap[str] = getJSON(val); } + template + T OCRepresentation::getValue(const std::string& str) const + { + T val; + + auto x = m_attributeMap.find(str); + + if(m_attributeMap.end() != x) + { + AttributeValue v = val; + parseJSON(v, x->second); + val = boost::get(v); + } + + return val; + } template bool OCRepresentation::getValue(const std::string& str, T& val) const -- 2.7.4