CID 1321282: virtual destructors are not needed
[scilab.git] / scilab / modules / scicos / includes / model / BaseObject.hxx
index d895802..de2cd69 100644 (file)
@@ -1,12 +1,15 @@
 /*
  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- *  Copyright (C) 2014-2014 - Scilab Enterprises - Clement DAVID
+ *  Copyright (C) 2014-2016 - Scilab Enterprises - Clement DAVID
  *
- *  This file must be used under the terms of the CeCILL.
- *  This source file is licensed as described in the file COPYING, which
- *  you should have received as part of this distribution.  The terms
- *  are also available at
- *  http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
+ * Copyright (C) 2012 - 2016 - Scilab Enterprises
+ *
+ * This file is hereby licensed under the terms of the GNU GPL v2.0,
+ * pursuant to article 5.3.4 of the CeCILL v.2.1.
+ * This file was originally licensed under the terms of the CeCILL v2.1,
+ * and continues to be available under such terms.
+ * For more information, see the COPYING file which you should have received
+ * along with this program.
  *
  */
 
@@ -14,6 +17,7 @@
 #define BASEOBJECT_HXX_
 
 #include <vector>
+#include <initializer_list>
 
 #include "utilities.hxx"
 
@@ -25,16 +29,30 @@ namespace model
 class BaseObject
 {
 public:
-    BaseObject(kind_t k) :
-        m_id(0), m_kind(k)
+    explicit BaseObject(kind_t k) :
+        m_id(ScicosID()), m_kind(k), m_refCount()
     {
+        // m_id will be set by the caller
     }
     BaseObject(const BaseObject& b) :
-        m_id(0), m_kind(b.m_kind)
+        m_id(b.m_id), m_kind(b.m_kind), m_refCount()
+    {
+    }
+    BaseObject(BaseObject&& b) :
+        m_id(b.m_id), m_kind(b.m_kind), m_refCount()
+    {
+    }
+    BaseObject(ScicosID id, kind_t k) :
+        m_id(id), m_kind(k), m_refCount()
     {
     }
-    virtual ~BaseObject() = default;
 
+    inline BaseObject& operator=(BaseObject&& o)
+    {
+        m_id = o.m_id;
+        m_kind = o.m_kind;
+        return *this;
+    }
     inline bool operator<(BaseObject o) const
     {
         return m_id < o.m_id;
@@ -58,6 +76,11 @@ public:
         return m_kind;
     }
 
+    inline unsigned& refCount()
+    {
+        return m_refCount;
+    }
+
 private:
     /**
      * An id is used as a reference to the current object
@@ -67,7 +90,12 @@ private:
     /**
      * Kind of the Object
      */
-    const kind_t m_kind;
+    kind_t m_kind;
+
+    /**
+     * Refcount of this object
+     */
+    unsigned m_refCount;
 };
 
 /** @defgroup utilities Shared utility classes