* Bug 16365 fixed: median(m,'r'|'c') was wrong after 5dc990
[scilab.git] / scilab / modules / ast / includes / ast / breakpoint.hxx
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2015 - Scilab Enterprises - Antoine ELIAS
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 __BREAKPOINT_HXX__
17 #define __BREAKPOINT_HXX__
18
19 #include <string>
20 #include "macro.hxx"
21 #include "exp.hxx"
22
23 extern "C"
24 {
25 #include "parsecommand.h"
26 }
27
28 namespace debugger
29 {
30 struct Breakpoint
31 {
32     Breakpoint() :  _pFunctionName(""),
33                     _iMacroLine(0),
34                     _pFileName(""),
35                     _iFileLine(0),
36                     _iFirstColumn(0),
37                     _condition(""),
38                     _conditionExp(NULL),
39                     _enable(true) {}
40     ~Breakpoint()
41     {
42         if (_conditionExp)
43         {
44             delete _conditionExp;
45         }
46     };
47
48     void setFileName(const std::string& name)
49     {
50         _pFileName = name;
51     }
52     const std::string& getFileName() const
53     {
54         return _pFileName;
55     }
56
57     void setFunctionName(const std::string& functionName)
58     {
59         _pFunctionName = functionName;
60     }
61     const std::string& getFunctioName() const
62     {
63         return _pFunctionName;
64     }
65
66     void setMacroLine(int line)
67     {
68         _iMacroLine = line;
69     }
70     int getMacroLine() const
71     {
72         return _iMacroLine;
73     }
74
75     void setBeginLine(int column)
76     {
77         _iFirstColumn = column;
78     }
79     int getBeginLine() const
80     {
81         return _iFirstColumn;
82     }
83
84     void setFileLine(int line)
85     {
86         _iFileLine = line;
87     }
88     int getFileLine() const
89     {
90         return _iFileLine;
91     }
92
93     bool hasMacro() const
94     {
95         return _pFunctionName.empty() == false && _iMacroLine >= 0;
96     }
97
98     bool hasFile() const
99     {
100         return _pFileName.empty() == false && _iFileLine >= 0;
101     }
102
103     void setEnable()
104     {
105         _enable = true;
106     }
107     void setDisable()
108     {
109         _enable = false;
110     }
111     bool isEnable() const
112     {
113         return _enable;
114     }
115
116     char* setCondition(const std::string& condition)
117     {
118         char* error = parseCommand(condition.data(), (void**)(&_conditionExp));
119         if(error)
120         {
121             return error;
122         }
123         _condition = condition;
124         return nullptr;
125     }
126
127     const std::string& getCondition() const
128     {
129         return _condition;
130     }
131
132     ast::Exp* getConditionExp()
133     {
134         return _conditionExp;
135     }
136
137 private:
138     std::string _pFunctionName;
139     int _iMacroLine;
140     int _iFirstColumn;
141     std::string _pFileName;
142     int _iFileLine;
143     std::string _condition;
144     ast::Exp* _conditionExp;
145     bool _enable;
146 };
147
148 typedef std::vector<Breakpoint*> Breakpoints;
149
150 }
151
152 #endif /* !__BREAKPOINT_HXX__ */