From a7395bdad0a820ae3097126309eb777cabcbfc73 Mon Sep 17 00:00:00 2001 From: Johannes Sixt Date: Sun, 15 Apr 2007 23:32:44 +0200 Subject: [PATCH] Replace ValArrays in class SourceWindow by std::vector. Another case where we better rely on proven than do-it-yourself code. --- kdbg/sourcewnd.cpp | 44 ++++++++++++++++++++------------------------ kdbg/sourcewnd.h | 11 ++++++----- kdbg/textvw.cpp | 2 +- kdbg/textvw.h | 4 ++-- 4 files changed, 29 insertions(+), 32 deletions(-) diff --git a/kdbg/sourcewnd.cpp b/kdbg/sourcewnd.cpp index ad8f2d0..7e28cf4 100644 --- a/kdbg/sourcewnd.cpp +++ b/kdbg/sourcewnd.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #ifdef HAVE_CONFIG_H #include "config.h" #endif @@ -65,14 +66,13 @@ bool SourceWindow::loadFile() } // then we copy it into our own m_sourceCode - m_sourceCode.setSize(m_texts.size()); - m_rowToLine.setSize(m_texts.size()); - m_lineItems.setSize(m_texts.size()); + m_sourceCode.resize(m_texts.size()); + m_rowToLine.resize(m_texts.size()); for (int i = 0; i < m_texts.size(); i++) { m_sourceCode[i].code = m_texts[i]; m_rowToLine[i] = i; - m_lineItems[i] = 0; } + m_lineItems.resize(m_texts.size(), 0); return true; } @@ -86,13 +86,14 @@ void SourceWindow::reloadFile() } // read text into m_sourceCode - m_sourceCode.setSize(0); /* clear old text */ + m_sourceCode.clear(); /* clear old text */ QTextStream t(&f); + std::back_insert_iterator > it(m_sourceCode); SourceLine s; while (!t.eof()) { s.code = t.readLine(); - m_sourceCode.append(s); + *it = s; } f.close(); @@ -109,23 +110,18 @@ void SourceWindow::reloadFile() for (int i = lineNo; i < m_sourceCode.size(); i++) { insertLine(m_sourceCode[i].code); } - // allocate line items - m_lineItems.setSize(m_texts.size()); - for (int i = m_texts.size()-1; i >= lineNo; i--) { - m_lineItems[i] = 0; - } } else { // the new file has fewer lines // here lineNo is the number of lines of the new file // remove the excessive lines - m_texts.setSize(lineNo); - m_lineItems.setSize(lineNo); + m_texts.resize(lineNo); } - f.close(); + // allocate line items + m_lineItems.resize(lineNo, 0); setNumRows(m_texts.size()); - m_rowToLine.setSize(m_texts.size()); + m_rowToLine.resize(m_texts.size()); for (int i = 0; i < m_texts.size(); i++) m_rowToLine[i] = i; @@ -556,8 +552,8 @@ void SourceWindow::disassembled(int lineNo, const QList& disas SourceLine& sl = m_sourceCode[lineNo]; // copy disassembled code and its addresses - sl.disass.setSize(disass.count()); - sl.disassAddr.setSize(disass.count()); + sl.disass.resize(disass.count()); + sl.disassAddr.resize(disass.count()); sl.canDisass = disass.count() > 0; for (uint i = 0; i < disass.count(); i++) { const DisassembledCode* c = @@ -670,16 +666,16 @@ void SourceWindow::expandRow(int row) TRACE("expanding row " + QString().setNum(row)); // get disassembled code int line = rowToLine(row); - const ValArray& disass = m_sourceCode[line].disass; + const std::vector& disass = m_sourceCode[line].disass; // remove PC (must be set again in slot of signal expanded()) m_lineItems[row] &= ~(liPC|liPCup); // insert new lines ++row; - m_rowToLine.insertAt(row, line, disass.size()); - m_lineItems.insertAt(row, 0, disass.size()); - m_texts.insertAt(row, disass); + m_rowToLine.insert(m_rowToLine.begin()+row, disass.size(), line); + m_lineItems.insert(m_lineItems.begin()+row, disass.size(), 0); + m_texts.insert(m_texts.begin()+row, disass.begin(), disass.end()); bool autoU = autoUpdate(); setAutoUpdate(false); @@ -711,9 +707,9 @@ void SourceWindow::collapseRow(int row) end++; } ++row; - m_rowToLine.removeAt(row, end-row); - m_lineItems.removeAt(row, end-row); - m_texts.removeAt(row, end-row); + m_rowToLine.erase(m_rowToLine.begin()+row, m_rowToLine.begin()+end); + m_lineItems.erase(m_lineItems.begin()+row, m_lineItems.begin()+end); + m_texts.erase(m_texts.begin()+row, m_texts.begin()+end); bool autoU = autoUpdate(); setAutoUpdate(false); diff --git a/kdbg/sourcewnd.h b/kdbg/sourcewnd.h index 300f1b8..823e687 100644 --- a/kdbg/sourcewnd.h +++ b/kdbg/sourcewnd.h @@ -7,6 +7,7 @@ #define SOURCEWND_H #include +#include #include "textvw.h" #include "dbgdriver.h" @@ -84,16 +85,16 @@ protected: struct SourceLine { QString code; /* a line of text */ - ValArray disass; /* its disassembled code */ - ValArray disassAddr; /* the addresses thereof */ + std::vector disass; /* its disassembled code */ + std::vector disassAddr; /* the addresses thereof */ bool canDisass; /* if line can be disassembled */ SourceLine() : canDisass(true) { } int findAddressRowOffset(const DbgAddr& address) const; }; - ValArray m_sourceCode; + std::vector m_sourceCode; - ValArray m_rowToLine; /* source line number for each row */ - ValArray m_lineItems; + std::vector m_rowToLine; //!< The source line number for each row + std::vector m_lineItems; //!< Icons displayed on the line QPixmap m_pcinner; /* PC at innermost frame */ QPixmap m_pcup; /* PC at frame up the stack */ QPixmap m_brkena; /* enabled breakpoint */ diff --git a/kdbg/textvw.cpp b/kdbg/textvw.cpp index c1f3953..f90e826 100644 --- a/kdbg/textvw.cpp +++ b/kdbg/textvw.cpp @@ -59,7 +59,7 @@ bool KTextView::updateCellSize(const QString& text) void KTextView::insertLine(const QString& text) { - m_texts.append(text); + m_texts.push_back(text); setNumRows(m_texts.size()); updateCellSize(text); diff --git a/kdbg/textvw.h b/kdbg/textvw.h index 5e2087d..8907602 100644 --- a/kdbg/textvw.h +++ b/kdbg/textvw.h @@ -7,7 +7,7 @@ #define TEXTVW_H #include "tableview.h" -#include "valarray.h" +#include class KTextView : public TableView { @@ -47,7 +47,7 @@ protected: int m_height; /* line height */ int m_tabWidth; /* in pixels */ - ValArray m_texts; + std::vector m_texts; int m_curRow; /* cursor position */ }; -- 2.11.4.GIT