4262f80c4e4c9056c81f0d11b222a2301795a01c
[scilab.git] / scilab / modules / ast / src / cpp / symbol / symbol.cpp
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 #ifndef SYMBOL_HXX
14 #define SYMBOL_HXX
15
16 #include "symbol.hxx"
17
18 symbol::Symbol::string_set_type symbol::Symbol::_set;
19
20 namespace symbol
21 {
22 // Constructor
23 Symbol::Symbol (const std::wstring &s):
24     _set_node (_set.insert(s).first)
25 {
26 }
27
28 // Accessor
29 const std::wstring& Symbol::getName () const
30 {
31     return (*_set_node);
32 }
33
34 // Return the size of the Symbol map.
35 Symbol::size_type Symbol::getSize()
36 {
37     return _set.size();
38 }
39
40 // Operators for better performances.
41 bool Symbol::operator== (const Symbol &rhs) const
42 {
43     return &(*_set_node) == &(*rhs.getNode());
44 }
45
46 bool Symbol::operator!= (const Symbol &rhs) const
47 {
48     return !(*this == rhs);
49 }
50
51 bool Symbol::operator<(const Symbol &rhs) const
52 {
53     return (&(*_set_node) < & (*rhs.getNode()));
54 }
55
56 std::wostream& operator<< (std::wostream &ostr, const Symbol &the)
57 {
58     return ostr << the.getName();
59 }
60
61 wchar_t **Symbol::getAll()
62 {
63     string_set_type::const_iterator it;
64     wchar_t **resultVector = new wchar_t*[getSize()];
65     int i = 0;
66
67     for (it = _set.begin() ; it != _set.end() ; ++it, ++i)
68     {
69         resultVector[i] = const_cast<wchar_t*>(it->c_str());
70     }
71
72     return resultVector;
73 }
74 }
75
76 #endif // !SYMBOL_SYMBOL_HXX