Lexer: slightly improve strings & comments lexing
[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     // compare values instead of pointers to preserve consistency across runs, platforms, etc..
54     return *_set_node < *rhs.getNode();
55 }
56
57 std::wostream& operator<< (std::wostream &ostr, const Symbol &the)
58 {
59     return ostr << the.getName();
60 }
61
62 wchar_t **Symbol::getAll()
63 {
64     string_set_type::const_iterator it;
65     wchar_t **resultVector = new wchar_t*[getSize()];
66     int i = 0;
67
68     for (it = _set.begin() ; it != _set.end() ; ++it, ++i)
69     {
70         resultVector[i] = const_cast<wchar_t*>(it->c_str());
71     }
72
73     return resultVector;
74 }
75 }
76
77 #endif // !SYMBOL_SYMBOL_HXX