Making C++ classes final
[iot2.git] / iotjava / iotruntime / cpp / setrelation / IoTRelation.hpp
index c2315f9a9672bd6a5fb26e89709bd096a17a9f64..a3f6c2191925d5d5e4cf01c7dd994cff6901d61d 100644 (file)
@@ -13,12 +13,13 @@ using namespace std;
  * @since       2016-09-06
  */
 template <class K,class V>
-class IoTRelation {
+class IoTRelation final {
        private:
-               unordered_multimap<K,V> rel;
+               const unordered_multimap<K,V>* rel;
        public:
                IoTRelation();
-               IoTRelation(unordered_multimap<K,V> const& s);
+               //IoTRelation(unordered_multimap<K,V> const& s);
+               IoTRelation(const unordered_multimap<K,V>* s);
                ~IoTRelation();
        public:
                typename unordered_multimap<K,V>::const_iterator find(const K& k);      // Find the object based on key
@@ -29,7 +30,7 @@ class IoTRelation {
                        typename unordered_multimap<K,V>::const_iterator> 
                        equal_range(const K& k);                                                                                // Equal range iterator
                int size();                                                                                                                     // Set size
-               unordered_multimap<K,V> values();                                                                       // Return set contents
+               unordered_multimap<K,V>* values();                                                                      // Return set contents
 };
 
 
@@ -46,7 +47,8 @@ IoTRelation<K,V>::IoTRelation() {
  * Useful constructor
  */
 template <class K,class V>
-IoTRelation<K,V>::IoTRelation(const unordered_multimap<K,V>& r) {
+//IoTRelation<K,V>::IoTRelation(const unordered_multimap<K,V>& r) {
+IoTRelation<K,V>::IoTRelation(const unordered_multimap<K,V>* r) {
 
        rel = r;
 }
@@ -58,7 +60,6 @@ IoTRelation<K,V>::IoTRelation(const unordered_multimap<K,V>& r) {
 template <class K,class V>
 IoTRelation<K,V>::~IoTRelation() {
 
-       //free(&set);
 }
 
 
@@ -68,7 +69,7 @@ IoTRelation<K,V>::~IoTRelation() {
 template <class K,class V>
 typename unordered_multimap<K,V>::const_iterator IoTRelation<K,V>::find(const K& k) {
 
-       return rel.find(k);
+       return (new unordered_multimap<K,V>(*rel))->find(k);
 }
 
 
@@ -78,7 +79,7 @@ typename unordered_multimap<K,V>::const_iterator IoTRelation<K,V>::find(const K&
 template <class K,class V>
 typename unordered_multimap<K,V>::const_iterator IoTRelation<K,V>::begin() {
 
-       return rel.begin();
+       return (new unordered_multimap<K,V>(*rel))->begin();
 }
 
 
@@ -88,7 +89,7 @@ typename unordered_multimap<K,V>::const_iterator IoTRelation<K,V>::begin() {
 template <class K,class V>
 typename unordered_multimap<K,V>::const_iterator IoTRelation<K,V>::end() {
 
-       return rel.end();
+       return (new unordered_multimap<K,V>(*rel))->end();
 }
 
 
@@ -100,7 +101,7 @@ std::pair<typename unordered_multimap<K,V>::const_iterator,
        typename unordered_multimap<K,V>::const_iterator> 
        IoTRelation<K,V>::equal_range(const K& k) {
 
-       return rel.equal_range(k);
+       return (new unordered_multimap<K,V>(*rel))->equal_range(k);
 }
 
 
@@ -110,7 +111,7 @@ std::pair<typename unordered_multimap<K,V>::const_iterator,
 template <class K,class V>
 int IoTRelation<K,V>::size() {
 
-       return rel.size();
+       return rel->size();
 }
 
 
@@ -118,9 +119,9 @@ int IoTRelation<K,V>::size() {
  * Return a new copy of the set
  */
 template <class K,class V>
-unordered_multimap<K,V> IoTRelation<K,V>::values() {
+unordered_multimap<K,V>* IoTRelation<K,V>::values() {
 
-       return new unordered_multimap<K,V>(rel);
+       return new unordered_multimap<K,V>(*rel);
 }
 #endif