License Header change: Removed the LICENSE_END before beta
[scilab.git] / scilab / modules / ast / includes / analysis / data / VarPromotion.hxx
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2015 - Scilab Enterprises - Calixte DENIZET
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 __VARPROMOTION_HXX__
17 #define __VARPROMOTION_HXX__
18
19 #include <iostream>
20
21 #include "tools.hxx"
22 #include "TIType.hxx"
23
24 namespace analysis
25 {
26
27 class VarPromotion
28 {
29
30 public:
31
32     struct Promotion
33     {
34         TIType first;
35         TIType second;
36
37         Promotion(const TIType & _first, const TIType & _second) : first(_first), second(_second) { }
38
39         friend std::wostream & operator<<(std::wostream & out, const Promotion & p)
40         {
41             out << L"(" << p.first << L" => " << p.second << L")";
42             return out;
43         }
44     };
45
46 private:
47
48     tools::SymbolMap<Promotion> map;
49
50 public:
51
52     VarPromotion() { }
53
54     inline void add(const symbol::Symbol & sym, const TIType & first, const TIType & second)
55     {
56         map.emplace(sym, Promotion(first, second));
57     }
58
59     inline const tools::SymbolMap<Promotion> & get() const
60     {
61         return map;
62     }
63
64     inline void clear()
65     {
66         map.clear();
67     }
68
69     friend std::wostream & operator<<(std::wostream & out, const VarPromotion & c)
70     {
71         out << L"VarPromotion";
72         tools::printMap(c.map, out);
73
74         return out;
75     }
76 };
77
78 } // namespace analysis
79
80
81 #endif // __VARPROMOTION_HXX__