diff options
Diffstat (limited to 'm68k_debugging.cpp')
-rw-r--r-- | m68k_debugging.cpp | 106 |
1 files changed, 56 insertions, 50 deletions
diff --git a/m68k_debugging.cpp b/m68k_debugging.cpp index 5bae0d0..bcad0e2 100644 --- a/m68k_debugging.cpp +++ b/m68k_debugging.cpp @@ -6,7 +6,6 @@ #include "bus.hpp" #include "utils.hpp" -#include <algorithm> #include <cassert> #include <cstdlib> #include <vector> @@ -158,38 +157,41 @@ void M68KDebuggingControl::SetBreakpoint( switch (type) { case BreakpointType::kSoftwareBreakpoint: case BreakpointType::kHardwareBreakpoint: { - const auto it = std::find_if( - code_bkpts.begin(), - code_bkpts.end(), - [&](const Breakpoint& b) { return b.offset == address && b.length == length; }); - if (it == code_bkpts.end()) - code_bkpts.push_back(Breakpoint{address, length}); + for (size_t bi = 0; bi < code_bkpts.size(); bi++) { + const auto& b = code_bkpts[bi]; + if (b.offset == address && b.length == length) { + return; + } + } + code_bkpts.push_back(Breakpoint{address, length}); } break; case BreakpointType::kWriteWatchpoint: { - const auto it = std::find_if( - write_bkpts.begin(), - write_bkpts.end(), - [&](const Breakpoint& b) { return b.offset == address && b.length == length; }); - if (it == write_bkpts.end()) - write_bkpts.push_back(Breakpoint{address, length}); + for (size_t bi = 0; bi < write_bkpts.size(); bi++) { + const auto& b = write_bkpts[bi]; + if (b.offset == address && b.length == length) { + return; + } + } + write_bkpts.push_back(Breakpoint{address, length}); } break; case BreakpointType::kReadWatchpoint: { - const auto it = std::find_if( - read_bkpts.begin(), - read_bkpts.end(), - [&](const Breakpoint& b) { return b.offset == address && b.length == length; }); - if (it == read_bkpts.end()) - read_bkpts.push_back(Breakpoint{address, length}); + for (size_t bi = 0; bi < read_bkpts.size(); bi++) { + const auto& b = read_bkpts[bi]; + if (b.offset == address && b.length == length) { + return; + } + } + read_bkpts.push_back(Breakpoint{address, length}); } break; case BreakpointType::kAccessWatchpoint: { - const auto it = std::find_if( - access_bkpts.begin(), - access_bkpts.end(), - [&](const Breakpoint& b) { return b.offset == address && b.length == length; }); - if (it == access_bkpts.end()) - access_bkpts.push_back(Breakpoint{address, length}); + for (size_t bi = 0; bi < access_bkpts.size(); bi++) { + const auto& b = access_bkpts[bi]; + if (b.offset == address && b.length == length) { + return; + } + } + access_bkpts.push_back(Breakpoint{address, length}); } break; - break; case BreakpointType::kUnsupported: { UNREACHABLE; } break; @@ -205,36 +207,40 @@ void M68KDebuggingControl::RemoveBreakpoint( switch (type) { case BreakpointType::kSoftwareBreakpoint: case BreakpointType::kHardwareBreakpoint: { - const auto it = std::find_if( - code_bkpts.begin(), - code_bkpts.end(), - [&](const Breakpoint& b) { return b.offset == address && b.length == length; }); - if (it != code_bkpts.end()) - code_bkpts.erase(it); + for (size_t bi = 0; bi < code_bkpts.size(); bi++) { + const auto& b = code_bkpts[bi]; + if (b.offset == address && b.length == length) { + code_bkpts.erase(code_bkpts.begin() + bi); + break; + } + } } break; case BreakpointType::kWriteWatchpoint: { - const auto it = std::find_if( - write_bkpts.begin(), - write_bkpts.end(), - [&](const Breakpoint& b) { return b.offset == address && b.length == length; }); - if (it != write_bkpts.end()) - write_bkpts.erase(it); + for (size_t bi = 0; bi < write_bkpts.size(); bi++) { + const auto& b = write_bkpts[bi]; + if (b.offset == address && b.length == length) { + write_bkpts.erase(write_bkpts.begin() + bi); + break; + } + } } break; case BreakpointType::kReadWatchpoint: { - const auto it = std::find_if( - read_bkpts.begin(), - read_bkpts.end(), - [&](const Breakpoint& b) { return b.offset == address && b.length == length; }); - if (it != read_bkpts.end()) - read_bkpts.erase(it); + for (size_t bi = 0; bi < read_bkpts.size(); bi++) { + const auto& b = read_bkpts[bi]; + if (b.offset == address && b.length == length) { + read_bkpts.erase(read_bkpts.begin() + bi); + break; + } + } } break; case BreakpointType::kAccessWatchpoint: { - const auto it = std::find_if( - access_bkpts.begin(), - access_bkpts.end(), - [&](const Breakpoint& b) { return b.offset == address && b.length == length; }); - if (it != access_bkpts.end()) - access_bkpts.erase(it); + for (size_t bi = 0; bi < access_bkpts.size(); bi++) { + const auto& b = access_bkpts[bi]; + if (b.offset == address && b.length == length) { + access_bkpts.erase(access_bkpts.begin() + bi); + break; + } + } } break; break; case BreakpointType::kUnsupported: { |