Fix some easy to fix warnings
[scilab.git] / scilab / modules / ast / includes / analysis / data / PolymorphicMacroCache.hxx
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2014 - 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 __POLYMORPHIC_MACRO_CACHE_HXX__
17 #define __POLYMORPHIC_MACRO_CACHE_HXX__
18
19 #include <iostream>
20 #include <map>
21 #include <unordered_map>
22 #include <vector>
23
24 #include "allexp.hxx"
25 #include "CompleteMacroSignature.hxx"
26 #include "MacroDef.hxx"
27 #include "MacroSignature.hxx"
28 #include "FunctionBlock.hxx"
29 #include "TIType.hxx"
30
31 namespace analysis
32 {
33
34 class GVN;
35 class AnalysisVisitor;
36
37 class PolymorphicMacroCache
38 {
39     typedef std::unordered_map<MacroSignature, CompleteMacroSignature, MacroSignature::Hash, MacroSignature::Eq> MacroSignMap;
40     uint64_t id;
41     MacroSignMap signatures;
42     GVN gvn;
43
44 public:
45
46     PolymorphicMacroCache();
47     ~PolymorphicMacroCache();
48
49     bool getOutTypes(AnalysisVisitor & visitor, MacroDef * macrodef, std::vector<TIType> & in, std::vector<TIType> & out, uint64_t & functionId);
50
51     friend std::wostream & operator<<(std::wostream & out, const PolymorphicMacroCache & pmc);
52
53 private:
54
55     GVN::Value * getValue(const GVN::Value * value, AnalysisVisitor & visitor, const std::vector<const MultivariatePolynomial *> & polys, const int maxVarId) const;
56
57     static bool getCompleteIn(MacroDef & macrodef, AnalysisVisitor & visitor, const std::vector<TIType> & in, std::vector<TIType> & completeIn);
58
59 };
60
61 } // namespace analysis
62
63 #endif // __POLYMORPHIC_MACRO_CACHE_HXX__