Merge remote-tracking branch 'origin/master' into windows
[scilab.git] / scilab / modules / ast / includes / exps / stringexp.hxx
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2007-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 #ifndef AST_STRINGEXP_HXX
17 #define AST_STRINGEXP_HXX
18
19 #include "constexp.hxx"
20
21 namespace ast
22 {
23 /** \brief Abstract an string Expression node.
24 **
25 ** \b Example: string*/
26 class StringExp : public ConstExp
27 {
28 public:
29     StringExp (const Location& location, const std::string& value)
30         : ConstExp (location),
31           _value (value)
32     {
33     }
34
35     StringExp (const Location& location, types::InternalType* value)
36         : ConstExp (location),
37           _value ("")
38     {
39         setConstant(value);
40     }
41
42     /** \brief Destroy an string Exp node.
43     **
44     ** Delete value (see constructor). */
45     virtual ~StringExp ()
46     {
47     }
48     /** \} */
49
50     virtual StringExp* clone()
51     {
52         StringExp* cloned = new StringExp(getLocation(), getValue());
53         cloned->setVerbose(isVerbose());
54         cloned->setConstant(getConstant());
55         return cloned;
56     }
57
58     virtual bool equal(const Exp & e) const
59     {
60         return e.getType() == STRINGEXP && _value == static_cast<const StringExp &>(e)._value;
61     }
62
63     /** \name Visitors entry point.
64     ** \{ */
65 public:
66     /** \brief Accept a const visitor \a v. */
67     virtual void accept (Visitor& v)
68     {
69         v.visit (*this);
70     }
71     /** \brief Accept a non-const visitor \a v. */
72     virtual void accept (ConstVisitor& v) const
73     {
74         v.visit (*this);
75     }
76     /** \} */
77
78 public:
79     /** \brief Return the name of the type name (read only). */
80     const std::string& getValue() const
81     {
82         return _value;
83     }
84     /** \} */
85
86     virtual ExpType getType() const
87     {
88         return STRINGEXP;
89     }
90     inline bool isStringExp() const
91     {
92         return true;
93     }
94
95 protected:
96     const std::string _value;
97 };
98
99 } // namespace ast
100
101 #endif // !AST_STRINGEXP_HXX