Making C++ classes final
[iot2.git] / iotjava / iotruntime / cpp / setrelation / IoTSet.hpp
index f64595f99cf808d3ae7821bd474455c8584b113a..e2a966d32dc4039de417a542383a91e80d7b6c8b 100644 (file)
@@ -13,12 +13,12 @@ using namespace std;
  * @since       2016-09-06
  */
 template <class T>
-class IoTSet {
+class IoTSet final {
        private:
-               unordered_set<T> set;
+               const unordered_set<T>* set;
        public:
                IoTSet();
-               IoTSet(unordered_set<T> const& s);
+               IoTSet(const unordered_set<T>* s);
                ~IoTSet();
        public:
                typename unordered_set<T>::const_iterator find(const T& k);     // Find the object
@@ -26,7 +26,7 @@ class IoTSet {
                typename unordered_set<T>::const_iterator begin();                      // Iterator
                typename unordered_set<T>::const_iterator end();                        // Iterator
                int size();                                                                                                     // Set size
-               unordered_set<T> values();                                                                      // Return set contents
+               unordered_set<T>* values();                                                                     // Return set contents
 };
 
 
@@ -43,7 +43,7 @@ IoTSet<T>::IoTSet() {
  * Useful constructor
  */
 template <class T>
-IoTSet<T>::IoTSet(const unordered_set<T>& s) {
+IoTSet<T>::IoTSet(const unordered_set<T>* s) {
 
        set = s;
 }
@@ -55,7 +55,6 @@ IoTSet<T>::IoTSet(const unordered_set<T>& s) {
 template <class T>
 IoTSet<T>::~IoTSet() {
 
-       //free(&set);
 }
 
 
@@ -65,7 +64,7 @@ IoTSet<T>::~IoTSet() {
 template <class T>
 typename unordered_set<T>::const_iterator IoTSet<T>::find(const T& k) {
 
-       return set.find(k);
+       return (new unordered_set<T>(*set))->find(k);
 }
 
 
@@ -75,7 +74,7 @@ typename unordered_set<T>::const_iterator IoTSet<T>::find(const T& k) {
 template <class T>
 typename unordered_set<T>::const_iterator IoTSet<T>::begin() {
 
-       return set.begin();
+       return (new unordered_set<T>(*set))->begin();
 }
 
 
@@ -85,7 +84,7 @@ typename unordered_set<T>::const_iterator IoTSet<T>::begin() {
 template <class T>
 typename unordered_set<T>::const_iterator IoTSet<T>::end() {
 
-       return set.end();
+       return (new unordered_set<T>(*set))->end();
 }
 
 
@@ -95,7 +94,7 @@ typename unordered_set<T>::const_iterator IoTSet<T>::end() {
 template <class T>
 int IoTSet<T>::size() {
 
-       return set.size();
+       return set->size();
 }
 
 
@@ -103,9 +102,9 @@ int IoTSet<T>::size() {
  * Return a new copy of the set
  */
 template <class T>
-unordered_set<T> IoTSet<T>::values() {
+unordered_set<T>* IoTSet<T>::values() {
 
-       return new unordered_set<T>(set);
+       return new unordered_set<T>(*set);
 }
 #endif