reforge symbol/context management
[scilab.git] / scilab / modules / symbol / src / cpp / context.cpp
1 /*
2 *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 *  Copyright (C) 2008-2008 - DIGITEO - Antoine ELIAS
4 *
5 *  This file must be used under the terms of the CeCILL.
6 *  This source file is licensed as described in the file COPYING, which
7 *  you should have received as part of this distribution.  The terms
8 *  are also available at
9 *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10 *
11 */
12
13 #include "context.hxx"
14 #include "function.hxx"
15 #include "macro.hxx"
16 #include "macrofile.hxx"
17 #include "addGatewayInContext.h"
18
19 void addGatewayInContext(wchar_t* _pwstName, OLDGW_FUNC _pFunc, wchar_t* _pwstModule)
20 {
21     symbol::Context::getInstance()->addFunction(types::Function::createFunction(_pwstName, _pFunc, _pwstModule));
22 }
23
24 void addMexGatewayInContext(wchar_t* _pwstName, MEXGW_FUNC _pFunc, wchar_t* _pwstModule)
25 {
26     symbol::Context::getInstance()->addFunction(types::Function::createFunction(_pwstName, _pFunc, _pwstModule));
27 }
28
29 namespace symbol
30 {
31 Context* Context::me;
32
33 Context::Context()
34 {
35     m_scopes = new Scopes();
36     m_scopes->scope_begin();
37 }
38
39 Context* Context::getInstance(void)
40 {
41     if (me == 0)
42     {
43         me = new Context();
44     }
45     return me;
46 }
47
48 void Context::scope_begin()
49 {
50     m_scopes->scope_begin();
51 }
52
53 void Context::scope_end()
54 {
55     m_scopes->scope_end();
56 }
57
58 types::InternalType* Context::get(const symbol::Symbol& _key) const
59 {
60     return m_scopes->get(_key);
61 }
62
63 types::InternalType* Context::getCurrentLevel(const symbol::Symbol& _key) const
64 {
65     return m_scopes->getCurrentLevel(_key);
66 }
67
68 types::InternalType* Context::getAllButCurrentLevel(const symbol::Symbol& _key) const
69 {
70     return m_scopes->getAllButCurrentLevel(_key);
71 }
72
73 types::InternalType* Context::getFunction(const symbol::Symbol& _key) const
74 {
75     return m_scopes->get(_key);
76 }
77
78 std::list<symbol::Symbol>& Context::getFunctionList(const std::wstring& _stModuleName, bool _bFromEnd)
79 {
80     return m_scopes->getFunctionList(_stModuleName, _bFromEnd);
81 }
82
83 bool Context::put(const symbol::Symbol& _key, types::InternalType &type)
84 {
85     m_scopes->put(_key, type);
86     return true;
87 }
88
89 bool Context::remove(const symbol::Symbol& _key)
90 {
91     m_scopes->remove(_key);
92     return true;
93 }
94
95 bool Context::putInPreviousScope(const symbol::Symbol& _key, types::InternalType &type)
96 {
97     m_scopes->putInPreviousScope(_key, type);
98     return true;
99 }
100
101 bool Context::addFunction(types::Function *_info)
102 {
103     m_scopes->put(symbol::Symbol(_info->getName()), *_info);
104     return true;
105 }
106
107 bool Context::AddMacro(types::Macro *_info)
108 {
109     m_scopes->put(symbol::Symbol(_info->getName()), *_info);
110     return true;
111 }
112
113 bool Context::AddMacroFile(types::MacroFile *_info)
114 {
115     m_scopes->put(symbol::Symbol(_info->getName()), *_info);
116     return true;
117 }
118
119 bool Context::isGlobalVisible(const symbol::Symbol& _key) const
120 {
121     return m_scopes->isGlobalVisible(_key);
122 }
123
124 /*return global variable, search in global scope ( highest )*/
125 types::InternalType* Context::getGlobalValue(const symbol::Symbol& _key) const
126 {
127     m_scopes->getGlobalValue(_key);
128     return NULL;
129 }
130
131 /*return global variable existance status*/
132 bool Context::isGlobalExists(const symbol::Symbol& _key) const
133 {
134     return m_scopes->isGlobalExists(_key);
135 }
136
137 void Context::setGlobalValue(const symbol::Symbol& _key, types::InternalType &value)
138 {
139     m_scopes->setGlobalValue(_key, value);
140 }
141
142 void Context::createEmptyGlobalValue(const symbol::Symbol& _key)
143 {
144     m_scopes->createEmptyGlobalValue(_key);
145 }
146
147 void Context::setGlobalVisible(const symbol::Symbol& _key, bool bVisible)
148 {
149     m_scopes->setGlobalVisible(_key, bVisible);
150 }
151
152 void Context::removeGlobal(const symbol::Symbol& _key)
153 {
154     m_scopes->removeGlobal(_key);
155 }
156
157 void Context::removeGlobalAll()
158 {
159     m_scopes->removeGlobalAll();
160 }
161 }