AST Inspector: speed-up things while executing 77/17277/2
Clément DAVID [Thu, 1 Oct 2015 13:09:29 +0000 (15:09 +0200)]
An unordered_set has O(1) insert / remove operations which are used to
inspect the allocated types.

Note: also reorder the variables on some constructors

Change-Id: I81f96a982940e5489297dd4357cc23c9595cb05b

scilab/modules/ast/includes/analysis/gvn/MultivariatePolynomial.hxx
scilab/modules/ast/includes/system_env/configvariable.hxx
scilab/modules/ast/includes/types/inspector.hxx
scilab/modules/ast/src/cpp/types/inspector.cpp

index 330f2cf..f91396e 100644 (file)
@@ -62,12 +62,12 @@ struct EXTERN_AST MultivariatePolynomial
      * \param _size the size of the polynomial (used to reserve the unordered_set)
      * \param _constant to init polynomial
      */
-    MultivariatePolynomial(const unsigned int _size, const int64_t _constant) : constant(_constant), polynomial(_size), valid(true) { }
+    MultivariatePolynomial(const unsigned int _size, const int64_t _constant) : constant(_constant), valid(true), polynomial(_size) { }
 
     /**
      * \brief copy constructor
      */
-    MultivariatePolynomial(const MultivariatePolynomial & mp) : constant(mp.constant), polynomial(mp.polynomial), valid(mp.valid) { }
+    MultivariatePolynomial(const MultivariatePolynomial & mp) : constant(mp.constant), valid(mp.valid), polynomial(mp.polynomial) { }
 
     /**
      * \brief Get an invalid polynomial (i.e. constant == NaN)
index 1279fd1..7794ebd 100644 (file)
@@ -393,7 +393,7 @@ public :
         std::wstring m_name;
         std::wstring m_file_name;
         WhereEntry(int line, int absolute_line, const std::wstring& name, int first_line, const std::wstring& file_name) :
-            m_line(line), m_absolute_line(absolute_line), m_name(name), m_macro_first_line(first_line), m_file_name(file_name) {}
+            m_line(line), m_absolute_line(absolute_line), m_macro_first_line(first_line), m_name(name), m_file_name(file_name) {}
     };
     typedef std::vector<WhereEntry> WhereVector;
 
index ff086af..6682b64 100644 (file)
@@ -18,7 +18,7 @@
 #pragma warning (disable : 4251)
 #endif
 
-#include <list>
+#include <unordered_set>
 #include <string>
 #include "dynlib_ast.h"
 
@@ -30,7 +30,7 @@ class InternalType;
 class EXTERN_AST Inspector
 {
 protected :
-    static std::list<InternalType*> m_vIT;
+    static std::unordered_set<InternalType*> m_vIT;
 
 public :
     static size_t getItemCount();
index 04fa791..8c25fb9 100644 (file)
@@ -13,6 +13,7 @@
 #include <string>
 #include <iostream>
 #include <map>
+#include <unordered_set>
 
 #include "inspector.hxx"
 #include "types.hxx"
@@ -21,7 +22,7 @@
 namespace types
 {
 #ifndef NDEBUG
-std::list<InternalType*> Inspector::m_vIT;
+std::unordered_set<InternalType*> Inspector::m_vIT;
 
 size_t Inspector::getItemCount()
 {
@@ -45,12 +46,12 @@ size_t Inspector::getUnreferencedItemCount()
 void Inspector::addItem(InternalType* _pIT)
 {
     types::GenericType* pGT = _pIT->getAs<types::GenericType>();
-    m_vIT.push_back(_pIT);
+    m_vIT.insert(_pIT);
 }
 
 void Inspector::removeItem(InternalType* _pIT)
 {
-    m_vIT.remove(_pIT);
+    m_vIT.erase(_pIT);
 }
 
 InternalType* Inspector::getItem(size_t _iPos)