From 79322103f2cdeeff680030c1fc8828b9cc512cbe Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Thu, 28 Nov 2013 23:48:12 -0800 Subject: [PATCH] Optimize DisassemblyFunction::getLineNum() a bit. Improves scrolling performance in some cases in the debugger. --- Core/Debugger/DisassemblyManager.cpp | 29 +++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/Core/Debugger/DisassemblyManager.cpp b/Core/Debugger/DisassemblyManager.cpp index 882239bbc8..7f1d030175 100644 --- a/Core/Debugger/DisassemblyManager.cpp +++ b/Core/Debugger/DisassemblyManager.cpp @@ -348,14 +348,29 @@ int DisassemblyFunction::getNumLines() int DisassemblyFunction::getLineNum(u32 address, bool findStart) { - for (int i = 0; i < lineAddresses.size(); i++) + if (findStart) { - u32 next = (i == lineAddresses.size()-1) ? this->address+this->size : lineAddresses[i+1]; - - if (lineAddresses[i] == address) - return i; - if (findStart && lineAddresses[i] <= address && next > address) - return i; + int last = (int)lineAddresses.size() - 1; + for (int i = 0; i < last; i++) + { + u32 next = lineAddresses[i + 1]; + if (lineAddresses[i] <= address && next > address) + return i; + } + if (lineAddresses[last] <= address && this->address + this->size > address) + return last; + } + else + { + int last = (int)lineAddresses.size() - 1; + for (int i = 0; i < last; i++) + { + u32 next = lineAddresses[i + 1]; + if (lineAddresses[i] == address) + return i; + } + if (lineAddresses[last] == address) + return last; } return 0;