cosmetic, rename functions
[scilab.git] / scilab / modules / symbol / includes / context.hxx
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2007-2008 - INRIA - Bruno JOFRET
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 /**
14  ** \file symbol/context.hh
15  ** \brief Define class Context.
16  */
17
18 #ifndef __CONTEXT_HXX__
19 #define __CONTEXT_HXX__
20 #include "stack.hxx"
21 #include "heap.hxx"
22 #include "internal.hxx"
23 #include "function.hxx"
24 #include "macro.hxx"
25 #include "macrofile.hxx"
26 #include "export_symbol.h"
27
28 namespace symbol
29 {
30
31 /** \brief Define class Context.
32  */
33 class EXTERN_SYMBOL Context
34 {
35 public :
36     Context();
37     static Context* getInstance(void);
38
39     /** Open a context scope i.e
40      ** open the heap table one
41      ** and the env table too. */
42     void scope_begin();
43
44     /** Close a context scope i.e
45      ** close the heap table one
46      ** and the env table too. */
47     void scope_end();
48
49     /** If key was associated to some Entry_T in the open scopes, return the
50      ** most recent insertion. Otherwise return the empty pointer. */
51     types::InternalType*        get(const symbol::Symbol& key) const;
52
53     /** If key was associated to some Entry_T in the last opened scope, return it.
54      ** Otherwise return the empty pointer. */
55     types::InternalType*        getCurrentLevel(const symbol::Symbol& key) const;
56
57     /** If key was associated to some Entry_T in the open scopes, return the
58      ** most recent insertion DESPITE the current/last one. Otherwise return the empty pointer. */
59     types::InternalType*        getAllButCurrentLevel(const symbol::Symbol& key) const;
60
61     /** If key was associated to some Entry_T in the open scopes, return the
62      ** most recent insertion. Otherwise return the empty pointer. */
63     types::InternalType*        getFunction(const symbol::Symbol& key) const;
64
65     /*return function list in the module _stModuleName*/
66     std::list<symbol::Symbol>& getFunctionList(const std::wstring& _stModuleName, bool _bFromEnd = true);
67
68     /* global functions */
69
70     /*return global variable visibility status*/
71     bool isGlobalVisible(const symbol::Symbol& key) const;
72
73     /*return global variable, search in global scope ( highest )*/
74     types::InternalType* getGlobalValue(const symbol::Symbol& key) const;
75
76     /*return global variable existance status*/
77     bool isGlobalExists(const symbol::Symbol& key) const;
78
79     /*create or update a global variable*/
80     void setGlobalValue(const symbol::Symbol& key, types::InternalType &value);
81
82     /*remove global variable and all visibility references */
83     void removeGlobal(const symbol::Symbol& key);
84
85     /*remove all global variables and references */
86     void removeGlobalAll();
87
88     /*create an empty variable*/
89     void createEmptyGlobalValue(const symbol::Symbol& key);
90
91     /*set variable visible/hidden in current global scope*/
92     void setGlobalVisible(const symbol::Symbol& key, bool bVisible = true);
93
94     /*print all tables*/
95     void print();
96
97     /*add symbol and value in the stack*/
98     bool put(const symbol::Symbol& key, types::InternalType &type);
99     /*add symbol and value in the previous scope*/
100     bool putInPreviousScope(const symbol::Symbol& key, types::InternalType &type);
101
102     /* remove symbol/value association */
103     bool remove(const symbol::Symbol& key);
104
105     bool addFunction(types::Function *_info);
106     bool AddMacro(types::Macro *_info);
107     bool AddMacroFile(types::MacroFile *_info);
108     void print(std::wostream& ostr) const
109     {
110         ostr << L"  Environment Variables:" << std::endl;
111         ostr << L"==========================" << std::endl;
112         ostr << EnvVarTable;
113     };
114 private :
115     Stack PrivateVarTable;
116     Heap HeapVarTable;
117     Stack EnvVarTable;
118
119     static Context* me;
120 };
121
122 inline std::wostream& operator<< (std::wostream& ostr, const Context &ctx)
123 {
124     ctx.print(ostr);
125     return ostr;
126 }
127
128 }
129 #endif /* !__CONTEXT_HXX__ */