void errorInScript(const std::wstring funcname, const ast::Exp* pExp);
//breakpoints functions
- void addBreakPoint(Breakpoint* bp);
+ bool addBreakPoint(Breakpoint* bp);
+ bool updateBreakPoint(Breakpoint* bp);
+ bool removeBreakPoint(Breakpoint* bp);
+ Breakpoints::iterator findBreakPoint(Breakpoint* bp);
void removeBreakPoint(int _iBreakPoint);
void setAllBreakPoints(Breakpoints& _bps);
void removeAllBreakPoints();
}
}
-void DebuggerManager::addBreakPoint(Breakpoint* bp)
-{
- //check if breakpoint does not exist
- for (const auto b : breakpoints)
- {
- bool isMacro = b->getFunctioName() == bp->getFunctioName() &&
- b->getMacroLine() != bp->getMacroLine();
- bool isFile = b->getFileName() == bp->getFileName() &&
- b->getFileLine() != bp->getFileLine();
- bool equalCondition = b->getCondition() != bp->getCondition();
- if ((isMacro || isFile) && equalCondition)
- {
- //same breakpoint, cancel add
- return;
- }
- }
-
- breakpoints.push_back(bp);
- sendUpdate();
-}
-
void DebuggerManager::setAllBreakPoints(Breakpoints& _bps)
{
// remove existing breakpoints
sendUpdate();
}
+Breakpoints::iterator DebuggerManager::findBreakPoint(Breakpoint* bp)
+{
+ Breakpoints::iterator found = std::find_if(breakpoints.begin(), breakpoints.end(),
+ [&](Breakpoint* b) {
+ bool isMacro = b->getFunctioName() != "" &&
+ b->getFunctioName() == bp->getFunctioName() &&
+ b->getMacroLine() == bp->getMacroLine();
+
+ bool isFile = b->getFileName() != "" &&
+ b->getFileName() == bp->getFileName() &&
+ b->getFileLine() == bp->getFileLine();
+
+ return (isMacro || isFile);
+ });
+
+ return found;
+}
+
+bool DebuggerManager::addBreakPoint(Breakpoint* bp)
+{
+ //check if breakpoint does not exist
+ Breakpoints::iterator iter = findBreakPoint(bp);
+ if(iter == breakpoints.end())
+ {
+ breakpoints.push_back(bp);
+ sendUpdate();
+ return true;
+ }
+
+ return false;
+}
+
+bool DebuggerManager::updateBreakPoint(Breakpoint* bp)
+{
+ Breakpoints::iterator iter = findBreakPoint(bp);
+ if(iter != breakpoints.end())
+ {
+ std::swap(*iter, bp);
+ delete bp;
+ return true;
+ }
+
+ return false;
+}
+
+bool DebuggerManager::removeBreakPoint(Breakpoint* bp)
+{
+ Breakpoints::iterator iter = findBreakPoint(bp);
+ if(iter != breakpoints.end())
+ {
+ delete *iter;
+ breakpoints.erase(iter);
+ return true;
+ }
+
+ return false;
+}
+
void DebuggerManager::removeBreakPoint(int _iBreakPoint)
{
if (_iBreakPoint >= 0 && _iBreakPoint <= (int)breakpoints.size())