cosmetic, rename functions
[scilab.git] / scilab / modules / symbol / includes / stack.hxx
index 4531d0f..6f2a4ae 100644 (file)
 namespace symbol
 {
 
-    /*-----------------------------------------------------------------------.
-    | This implements stacks for storing definitions of variables and        |
-    | functions as a stack of dictionnaries.  Each time a scope is opened, a |
-    | new dictionnary is added on the top of the stack; the dictionary is    |
-    | removed when the scope is closed.  Lookup of symbols is donne in the   |
-    | last added dictionnary first (LIFO).                                   |
-    `-----------------------------------------------------------------------*/
-    class EXTERN_SYMBOL Stack : public Table
+/*-----------------------------------------------------------------------.
+| This implements stacks for storing definitions of variables and        |
+| functions as a stack of dictionnaries.  Each time a scope is opened, a |
+| new dictionnary is added on the top of the stack; the dictionary is    |
+| removed when the scope is closed.  Lookup of symbols is donne in the   |
+| last added dictionnary first (LIFO).                                   |
+`-----------------------------------------------------------------------*/
+class EXTERN_SYMBOL Stack : public Table
+{
+public:
+    /** Open a new scope */
+    void scope_begin()
     {
-    public:
-        /** Open a new scope */
-        void scope_begin()
-        {
-            this->l_scope.push_front(new Scope());
-        }
+        this->l_scope.push_front(new Scope());
+    }
+
+    /** Close the last scope, forgetting everything since the latest
+    ** scope_begin (). */
+    void scope_end()
+    {
+        Scope* scope = this->l_scope.front();
+        delete scope;
+        this->l_scope.pop_front();
+    }
 
-        /** Close the last scope, forgetting everything since the latest
-        **     scope_begin (). */
-        void scope_end()
+    void putInPreviousScope(const symbol::Symbol& key, types::InternalType &value)
+    {
+        if (l_scope.size() > 1)
         {
-            Scope* scope = this->l_scope.front();
-            delete scope;
-            this->l_scope.pop_front();
+            std::list<Scope*>::iterator i;
+            i = l_scope.begin();
+            i++;
+            (*i)->put(key, value);
         }
+    }
+
+    /** Associate value to key in the current scope. */
+    void put(const symbol::Symbol& key, types::InternalType &value)
+    {
+        (this->l_scope.front())->put(key, value);
+    }
 
-        void put_in_previous_scope(const symbol::Symbol& key, types::InternalType &value)
+    /** Remove Association between value and key in the current scope. */
+    void remove(const symbol::Symbol& key)
+    {
+        (this->l_scope.front())->remove(key);
+    }
+
+    /** If key was associated to some Entry_T in the open scopes, return the
+    ** most recent insertion. Otherwise return the empty pointer. */
+    types::InternalType* get(const symbol::Symbol& key) const
+    {
+        types::InternalType* result = NULL;
+
+        std::list<Scope*>::const_iterator it_list_scope = this->l_scope.begin();
+
+        for (; it_list_scope != this->l_scope.end(); it_list_scope++)
         {
-            if(l_scope.size() > 1)
+            result = (*it_list_scope)->get(key);
+            if (result)
             {
-                std::list<Scope*>::iterator i;
-                i = l_scope.begin();
-                i++;
-                (*i)->put(key, value);
+                return result;
             }
         }
+        return result;
+    }
 
-        /** Associate value to key in the current scope. */
-        void put(const symbol::Symbol& key, types::InternalType &value)
-        {
-            (this->l_scope.front())->put(key, value);
-        }
+    /** If key was associated to some Entry_T in the open scopes, return the
+    ** most recent insertion DESPITE the current/last one. Otherwise return the empty pointer. */
+    types::InternalType* getAllButCurrentLevel(const symbol::Symbol& key) const
+    {
+        types::InternalType* result = 0;
 
-        /** Remove Association between value and key in the current scope. */
-        void remove(const symbol::Symbol& key)
+        /*
+        ** If we are in the top level scope, also look within it
+        */
+        if (l_scope.size() == 1)
         {
-            (this->l_scope.front())->remove(key);
+            return l_scope.front()->get(key);
         }
 
-        /** If key was associated to some Entry_T in the open scopes, return the
-        ** most recent insertion. Otherwise return the empty pointer. */
-        types::InternalType* get(const symbol::Symbol& key) const
+        /*
+        ** else look in all previous scopes but not in the current one.
+        */
+        std::list<Scope*>::const_iterator it_list_scope = this->l_scope.begin();
+        ++it_list_scope;
+        for ( ; it_list_scope != this->l_scope.end(); ++it_list_scope)
         {
-            types::InternalType* result = NULL;
-
-            std::list<Scope*>::const_iterator it_list_scope = this->l_scope.begin();
-
-            for (; it_list_scope != this->l_scope.end(); it_list_scope++)
+            result = (*it_list_scope)->get(key);
+            if (result == 0)
             {
-                result = (*it_list_scope)->get(key);
-                if(result)
-                {
-                    return result;
-                }
+                continue ;
             }
             return result;
         }
+        return result;
+    }
 
-        /** If key was associated to some Entry_T in the open scopes, return the
-        ** most recent insertion DESPITE the current/last one. Otherwise return the empty pointer. */
-        types::InternalType* getAllButCurrentLevel(const symbol::Symbol& key) const
-        {
-            types::InternalType* result = 0;
+    /** If key was associated to some Entry_T in the last opened scope, return it.
+    ** Otherwise return the empty pointer. */
+    types::InternalType* getCurrentLevel(const symbol::Symbol& key) const
+    {
+        return l_scope.front()->get(key);
+    }
 
-            /*
-            ** If we are in the top level scope, also look within it
-            */
-            if (l_scope.size() == 1)
-            {
-                return l_scope.front()->get(key);
-            }
 
-            /*
-            ** else look in all previous scopes but not in the current one.
-            */
-            std::list<Scope*>::const_iterator it_list_scope = this->l_scope.begin();
-            ++it_list_scope;
-            for ( ; it_list_scope != this->l_scope.end(); ++it_list_scope)
-            {
-                result = (*it_list_scope)->get(key);
-                if (result == 0)
-                {
-                    continue ;
-                }
-                return result;
-            }
-            return result;
-        }
+    std::list<symbol::Symbol>& getFunctionList(const std::wstring& _stModuleName, bool _bFromEnd)
+    {
+        //get hightest scope
+        std::list<Scope*>::iterator i;
 
-        /** If key was associated to some Entry_T in the last opened scope, return it.
-        ** Otherwise return the empty pointer. */
-        types::InternalType* getCurrentLevel(const symbol::Symbol& key) const
+        if (_bFromEnd)
         {
-            return l_scope.front()->get(key);
+            i = l_scope.end();
+            i--;
         }
-
-
-        std::list<symbol::Symbol>& get_funlist(const std::wstring& _stModuleName)
+        else
         {
-            //get hightest scope
-            std::list<Scope*>::iterator i = l_scope.end();
-            i--;
-            return (*i)->get_names(_stModuleName);
+            i = l_scope.begin();
         }
-    };
 
-    inline std::wostream& operator<< (std::wostream& ostr, const Stack &tbl)
-    {
-        tbl.print (ostr);
-        return ostr;
+        return (*i)->get_names(_stModuleName);
     }
+};
+
+inline std::wostream& operator<< (std::wostream& ostr, const Stack &tbl)
+{
+    tbl.print (ostr);
+    return ostr;
+}
 }