Improve performance for loop and insertion
[scilab.git] / scilab / modules / ast / includes / exps / caseexp.hxx
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2010-2010 - DIGITEO - 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 __AST_CASE_EXP_HXX__
14 #define __AST_CASE_EXP_HXX__
15
16 #include "exp.hxx"
17 #include "seqexp.hxx"
18
19 namespace ast
20 {
21 class CaseExp : public ControlExp
22 {
23 public :
24     CaseExp(const Location& location,
25             Exp& test,
26             SeqExp& body) :
27         ControlExp (location)
28     {
29         test.setParent(this);
30         body.setParent(this);
31         _exps.push_back(&test);
32         _exps.push_back(body.getAs<Exp>());
33     }
34
35     ~CaseExp()
36     {
37     }
38
39     virtual CaseExp* clone()
40     {
41         CaseExp* cloned = new CaseExp(getLocation(), *getTest()->clone(), *getBody()->clone()->getAs<SeqExp>());
42         cloned->setVerbose(isVerbose());
43         return cloned;
44     }
45     /** \name Visitors entry point.
46     ** \{ */
47 public:
48     /** \brief Accept a const visitor \a v. */
49     virtual void accept (Visitor& v)
50     {
51         v.visit (*this);
52     }
53     /** \brief Accept a non-const visitor \a v. */
54     virtual void accept (ConstVisitor& v) const
55     {
56         v.visit (*this);
57     }
58     /** \} */
59
60 public :
61     Exp* getTest() const
62     {
63         return _exps[0];
64     }
65
66     Exp* getBody() const
67     {
68         return _exps[1];
69     }
70
71     virtual ExpType getType() const
72     {
73         return CASEEXP;
74     }
75
76     inline bool isCaseExp() const
77     {
78         return true;
79     }
80 };
81 }
82
83 #endif /* !__AST_CASE_EXP_HXX__ */