Bump version numbers to 6.2.0
[scilab.git] / scilab / modules / ast / includes / symbol / libraries.hxx
1 /*
2 *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 *  Copyright (C) 2014 - Scilab Enterprises - Antoine ELIAS
4 *
5  * Copyright (C) 2012 - 2016 - Scilab Enterprises
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13 *
14 */
15
16 #ifndef __LIBRARIES_HXX__
17 #define __LIBRARIES_HXX__
18
19 #include <map>
20 #include <stack>
21 #include "symbol.hxx"
22 #include "types.hxx"
23 #include "library.hxx"
24
25 namespace symbol
26 {
27 struct ScopedLibrary
28 {
29     ScopedLibrary(int _iLevel, types::Library* _pLib) : m_iLevel(_iLevel), m_pLib(_pLib) {};
30
31     types::MacroFile* getMacroFile(const Symbol& _key)
32     {
33         return m_pLib->get(_key.getName());
34     }
35
36     int m_iLevel;
37     types::Library* m_pLib;
38 };
39
40 struct Library
41 {
42     typedef std::stack<ScopedLibrary*> StackLib;
43
44     Library(const Symbol& _name) : name(_name), m_global(false) {};
45
46     void put(types::Library* _pLib, int _iLevel);
47     types::MacroFile* get(const Symbol& _keyMacro) const;
48     int getMacrosName(std::list<std::wstring>& lst);
49
50     inline void put(ScopedLibrary* pSL)
51     {
52         stack.push(pSL);
53     }
54
55     inline bool empty() const
56     {
57         return stack.empty();
58     }
59
60     inline ScopedLibrary* top() const
61     {
62         return stack.top();
63     }
64
65     void pop()
66     {
67         stack.pop();
68     }
69
70     inline Symbol getSymbol() const
71     {
72         return name;
73     }
74
75 private :
76     StackLib stack;
77     Symbol name;
78     bool m_global;
79 };
80
81 struct Libraries
82 {
83     typedef std::map<Symbol, Library*> MapLibs;
84
85     Libraries() {}
86
87     Library* getOrCreate(const Symbol& _key);
88     int getLevel(const Symbol& _key) const;
89     void put(const Symbol& _keyLib, types::Library* _pLib, int _iLevel);
90     bool putInPreviousScope(const Symbol& _keyLib, types::Library* _pLib, int _iLevel);
91     types::InternalType* get(const Symbol& _key, int _iLevel);
92     bool remove(const Symbol& _key, int _iLevel);
93     int getMacrosName(std::list<std::wstring>& lst);
94     int getVarsName(std::list<std::wstring>& lst);
95     int getVarsToVariableBrowser(std::list<Library*>& lst);
96     void clearAll();
97     bool getVarsNameForWho(std::list<std::wstring>* lstVarName, int* iVarLenMax, bool bSorted = false) const;
98     int whereis(std::list<std::wstring>& lst, const Symbol& _key);
99     int librarieslist(std::list<std::wstring>& lst);
100
101 private:
102     MapLibs libs;
103 };
104 }
105 #endif /* !__LIBRARIES_HXX__ */