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