cec6bb36e527a895f414d2c5c0690adb470e6705
[scilab.git] / scilab / modules / ast / includes / exps / arraylistvar.hxx
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2008-2008 - DIGITEO - 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 /**
17 ** \file arraylistvar.hxx
18 ** Define the Arraylistuence Varression class.
19 */
20
21 #ifndef __ARRAYLISTVAR_HXX__
22 #define __ARRAYLISTVAR_HXX__
23
24 #include "var.hxx"
25
26 namespace ast
27 {
28
29 /** \brief Abstract an Array List of Variable node.
30 **
31 ** \b Example: a, b, $, : */
32 class ArrayListVar : public Var
33 {
34     /** \name Ctor & dtor.
35     ** \{ */
36 public:
37     /** \brief Construct an Array List of Variable node.
38     ** \param location scanner position informations
39     ** \param body VAR LIST intruction
40     */
41     ArrayListVar (const Location& location,
42                   exps_t& vars)
43         : Var (location)
44     {
45         for (auto var : vars)
46         {
47             var->setParent(this);
48             _exps.push_back(var);
49         }
50
51         delete &vars;
52     }
53
54     virtual ArrayListVar* clone()
55     {
56         exps_t* exps = new exps_t;
57         for (exps_t::const_iterator it = _exps.begin(), itEnd = _exps.end(); it != itEnd ; ++it)
58         {
59             exps->push_back((*it)->clone());
60         }
61
62         ArrayListVar* cloned = new ArrayListVar(getLocation(), *exps);
63         cloned->setVerbose(isVerbose());
64         return cloned;
65     }
66
67     /** \name Visitors entry point.
68     ** \{ */
69 public:
70     /** \brief Accept a const visitor \a v. */
71     virtual void accept (Visitor& v)
72     {
73         v.visit (*this);
74     }
75     /** \brief Accept a non-const visitor \a v. */
76     virtual void accept (ConstVisitor& v) const
77     {
78         v.visit (*this);
79     }
80     /** \} */
81
82
83     /** \name Accessors.
84     ** \{ */
85 public:
86
87     inline const exps_t& getVars() const
88     {
89         return _exps;
90     }
91
92     inline exps_t& getVars()
93     {
94         return _exps;
95     }
96     /** \} */
97
98     virtual ExpType getType() const
99     {
100         return ARRAYLISTVAR;
101     }
102     inline bool isArrayListVar()
103     {
104         return true;
105     }
106
107 protected:
108 };
109
110 } // namespace ast
111
112 #endif // __ARRAYLISTVAR_HXX__