Pointer cleanup (#242)
- Made greater use of smart pointers, eliminating many instances of manual memory management - Do not use pointers at all for many non-polymorphic classes - Assorted other code cleanup
This commit is contained in:
+19
-58
@@ -18,9 +18,8 @@
|
||||
* along with gLabels-qt. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "Merge.h"
|
||||
|
||||
#include "Record.h"
|
||||
#include "Merge.h"
|
||||
|
||||
|
||||
namespace glabels
|
||||
@@ -31,25 +30,11 @@ namespace glabels
|
||||
///
|
||||
/// Constructor
|
||||
///
|
||||
Merge::Merge( const Merge* merge ) : mId(merge->mId), mSource(merge->mSource)
|
||||
Merge::Merge( const Merge* merge )
|
||||
: mId(merge->mId),
|
||||
mSource(merge->mSource),
|
||||
mRecordList(merge->mRecordList)
|
||||
{
|
||||
foreach ( Record* record, merge->mRecordList )
|
||||
{
|
||||
mRecordList << record->clone();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
///
|
||||
/// Destructor
|
||||
///
|
||||
Merge::~Merge()
|
||||
{
|
||||
foreach ( Record* record, mRecordList )
|
||||
{
|
||||
delete record;
|
||||
}
|
||||
mRecordList.clear();
|
||||
}
|
||||
|
||||
|
||||
@@ -79,16 +64,12 @@ namespace glabels
|
||||
mSource = source;
|
||||
|
||||
// Clear out any old records
|
||||
foreach ( Record* record, mRecordList )
|
||||
{
|
||||
delete record;
|
||||
}
|
||||
mRecordList.clear();
|
||||
|
||||
open();
|
||||
for ( Record* record = readNextRecord(); record != nullptr; record = readNextRecord() )
|
||||
for ( Record record = readNextRecord(); !record.isEmpty(); record = readNextRecord() )
|
||||
{
|
||||
mRecordList.append( record );
|
||||
mRecordList.push_back( record );
|
||||
}
|
||||
close();
|
||||
|
||||
@@ -99,32 +80,12 @@ namespace glabels
|
||||
///
|
||||
/// Get record list
|
||||
///
|
||||
const QList<Record*>& Merge::recordList( ) const
|
||||
const QList<Record>& Merge::recordList( ) const
|
||||
{
|
||||
return mRecordList;
|
||||
}
|
||||
|
||||
|
||||
///
|
||||
/// Select matching record
|
||||
///
|
||||
void Merge::select( Record* record )
|
||||
{
|
||||
record->setSelected( true );
|
||||
emit selectionChanged();
|
||||
}
|
||||
|
||||
|
||||
///
|
||||
/// Unselect matching record
|
||||
///
|
||||
void Merge::unselect( Record* record )
|
||||
{
|
||||
record->setSelected( false );
|
||||
emit selectionChanged();
|
||||
}
|
||||
|
||||
|
||||
///
|
||||
/// Select/unselect i'th record
|
||||
///
|
||||
@@ -132,7 +93,7 @@ namespace glabels
|
||||
{
|
||||
if ( (i >= 0) && (i < mRecordList.size()) )
|
||||
{
|
||||
mRecordList[i]->setSelected( state );
|
||||
mRecordList[i].setSelected( state );
|
||||
emit selectionChanged();
|
||||
}
|
||||
}
|
||||
@@ -143,9 +104,9 @@ namespace glabels
|
||||
///
|
||||
void Merge::selectAll()
|
||||
{
|
||||
foreach ( Record* record, mRecordList )
|
||||
for ( auto& record : mRecordList )
|
||||
{
|
||||
record->setSelected( true );
|
||||
record.setSelected( true );
|
||||
}
|
||||
emit selectionChanged();
|
||||
}
|
||||
@@ -156,9 +117,9 @@ namespace glabels
|
||||
///
|
||||
void Merge::unselectAll()
|
||||
{
|
||||
foreach ( Record* record, mRecordList )
|
||||
for ( auto& record : mRecordList )
|
||||
{
|
||||
record->setSelected( false );
|
||||
record.setSelected( false );
|
||||
}
|
||||
emit selectionChanged();
|
||||
}
|
||||
@@ -171,9 +132,9 @@ namespace glabels
|
||||
{
|
||||
int count = 0;
|
||||
|
||||
foreach ( Record* record, mRecordList )
|
||||
for ( const auto& record : mRecordList )
|
||||
{
|
||||
if ( record->isSelected() )
|
||||
if ( record.isSelected() )
|
||||
{
|
||||
count++;
|
||||
}
|
||||
@@ -186,13 +147,13 @@ namespace glabels
|
||||
///
|
||||
/// Return list of selected records
|
||||
///
|
||||
const QList<Record*> Merge::selectedRecords() const
|
||||
const QList<Record> Merge::selectedRecords() const
|
||||
{
|
||||
QList<Record*> list;
|
||||
QList<Record> list;
|
||||
|
||||
foreach ( Record* record, mRecordList )
|
||||
for ( const auto& record : mRecordList )
|
||||
{
|
||||
if ( record->isSelected() )
|
||||
if ( record.isSelected() )
|
||||
{
|
||||
list.append( record );
|
||||
}
|
||||
|
||||
@@ -22,6 +22,8 @@
|
||||
#define merge_Merge_h
|
||||
|
||||
|
||||
#include "Record.h"
|
||||
|
||||
#include <QObject>
|
||||
#include <QString>
|
||||
#include <QStringList>
|
||||
@@ -52,7 +54,7 @@ namespace glabels
|
||||
Merge() = default;
|
||||
Merge( const Merge* merge );
|
||||
public:
|
||||
~Merge() override;
|
||||
virtual ~Merge() = default;
|
||||
|
||||
|
||||
/////////////////////////////////
|
||||
@@ -69,21 +71,19 @@ namespace glabels
|
||||
QString source() const;
|
||||
void setSource( const QString& source );
|
||||
|
||||
const QList<Record*>& recordList( ) const;
|
||||
const QList<Record>& recordList( ) const;
|
||||
|
||||
|
||||
/////////////////////////////////
|
||||
// Selection methods
|
||||
/////////////////////////////////
|
||||
public:
|
||||
void select( Record* record );
|
||||
void unselect( Record* record );
|
||||
void setSelected( int i, bool state = true );
|
||||
void selectAll();
|
||||
void unselectAll();
|
||||
|
||||
int nSelectedRecords() const;
|
||||
const QList<Record*> selectedRecords() const;
|
||||
const QList<Record> selectedRecords() const;
|
||||
|
||||
|
||||
/////////////////////////////////
|
||||
@@ -95,7 +95,7 @@ namespace glabels
|
||||
protected:
|
||||
virtual void open() = 0;
|
||||
virtual void close() = 0;
|
||||
virtual Record* readNextRecord() = 0;
|
||||
virtual Record readNextRecord() = 0;
|
||||
|
||||
|
||||
/////////////////////////////////
|
||||
@@ -110,10 +110,10 @@ namespace glabels
|
||||
// Private data
|
||||
/////////////////////////////////
|
||||
protected:
|
||||
QString mId;
|
||||
QString mId;
|
||||
private:
|
||||
QString mSource;
|
||||
QList<Record*> mRecordList;
|
||||
QString mSource;
|
||||
QList<Record> mRecordList;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -108,9 +108,9 @@ namespace glabels
|
||||
///
|
||||
/// Read next record
|
||||
///
|
||||
Record* None::readNextRecord()
|
||||
Record None::readNextRecord()
|
||||
{
|
||||
return nullptr;
|
||||
return NullRecord();
|
||||
}
|
||||
|
||||
} // namespace merge
|
||||
|
||||
@@ -41,7 +41,7 @@ namespace glabels
|
||||
public:
|
||||
None();
|
||||
None( const None* merge );
|
||||
~None() override = default;
|
||||
virtual ~None() = default;
|
||||
|
||||
|
||||
/////////////////////////////////
|
||||
@@ -67,7 +67,7 @@ namespace glabels
|
||||
protected:
|
||||
void open() override;
|
||||
void close() override;
|
||||
Record* readNextRecord() override;
|
||||
Record readNextRecord() override;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -26,32 +26,6 @@ namespace glabels
|
||||
namespace merge
|
||||
{
|
||||
|
||||
///
|
||||
/// Constructor
|
||||
///
|
||||
Record::Record() : mSelected( true )
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
///
|
||||
/// Constructor
|
||||
///
|
||||
Record::Record( const Record* record )
|
||||
: QMap<QString,QString>(*record), mSelected(record->mSelected)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
///
|
||||
/// Clone
|
||||
///
|
||||
Record* Record::clone() const
|
||||
{
|
||||
return new Record( this );
|
||||
}
|
||||
|
||||
|
||||
///
|
||||
/// Is record selected?
|
||||
///
|
||||
|
||||
+3
-15
@@ -37,20 +37,6 @@ namespace glabels
|
||||
class Record : public QMap<QString,QString>
|
||||
{
|
||||
|
||||
/////////////////////////////////
|
||||
// Life Cycle
|
||||
/////////////////////////////////
|
||||
public:
|
||||
Record();
|
||||
Record( const Record* record );
|
||||
|
||||
|
||||
/////////////////////////////////
|
||||
// Object duplication
|
||||
/////////////////////////////////
|
||||
Record* clone() const;
|
||||
|
||||
|
||||
/////////////////////////////////
|
||||
// Properties
|
||||
/////////////////////////////////
|
||||
@@ -63,10 +49,12 @@ namespace glabels
|
||||
// Private data
|
||||
/////////////////////////////////
|
||||
private:
|
||||
bool mSelected;
|
||||
bool mSelected{ true };
|
||||
|
||||
};
|
||||
|
||||
|
||||
using NullRecord = const Record;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+15
-8
@@ -18,6 +18,7 @@
|
||||
* along with gLabels-qt. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
|
||||
#include "Text.h"
|
||||
|
||||
#include "Record.h"
|
||||
@@ -34,7 +35,10 @@ namespace glabels
|
||||
/// Constructor
|
||||
///
|
||||
Text::Text( QChar delimiter, bool line1HasKeys )
|
||||
: mDelimeter(delimiter), mLine1HasKeys(line1HasKeys), mNFieldsMax(0)
|
||||
: Merge(),
|
||||
mDelimeter(delimiter),
|
||||
mLine1HasKeys(line1HasKeys),
|
||||
mNFieldsMax(0)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -44,8 +48,10 @@ namespace glabels
|
||||
///
|
||||
Text::Text( const Text* merge )
|
||||
: Merge( merge ),
|
||||
mDelimeter(merge->mDelimeter), mLine1HasKeys(merge->mLine1HasKeys),
|
||||
mKeys(merge->mKeys), mNFieldsMax(merge->mNFieldsMax)
|
||||
mDelimeter(merge->mDelimeter),
|
||||
mLine1HasKeys(merge->mLine1HasKeys),
|
||||
mKeys(merge->mKeys),
|
||||
mNFieldsMax(merge->mNFieldsMax)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -115,24 +121,25 @@ namespace glabels
|
||||
///
|
||||
/// Read next record
|
||||
///
|
||||
Record* Text::readNextRecord()
|
||||
Record Text::readNextRecord()
|
||||
{
|
||||
QStringList values = parseLine();
|
||||
if ( !values.isEmpty() )
|
||||
{
|
||||
auto* record = new Record();
|
||||
Record record;
|
||||
|
||||
int iField = 0;
|
||||
foreach ( QString value, values )
|
||||
for ( const auto& value : values )
|
||||
{
|
||||
(*record)[ keyFromIndex(iField) ] = value;
|
||||
record[ keyFromIndex(iField) ] = value;
|
||||
iField++;
|
||||
}
|
||||
mNFieldsMax = std::max( mNFieldsMax, iField );
|
||||
|
||||
return record;
|
||||
}
|
||||
return nullptr;
|
||||
|
||||
return NullRecord();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
#ifndef merge_Text_h
|
||||
#define merge_Text_h
|
||||
|
||||
|
||||
#include "Merge.h"
|
||||
|
||||
#include <QFile>
|
||||
@@ -43,7 +44,7 @@ namespace glabels
|
||||
protected:
|
||||
Text( QChar delimiter, bool line1HasKeys );
|
||||
Text( const Text* merge );
|
||||
~Text() override = default;
|
||||
virtual ~Text() = default;
|
||||
|
||||
|
||||
/////////////////////////////////
|
||||
@@ -55,7 +56,7 @@ namespace glabels
|
||||
protected:
|
||||
void open() override;
|
||||
void close() override;
|
||||
Record* readNextRecord() override;
|
||||
Record readNextRecord() override;
|
||||
|
||||
|
||||
/////////////////////////////////
|
||||
|
||||
@@ -42,7 +42,7 @@ namespace glabels
|
||||
private:
|
||||
TextColon();
|
||||
TextColon( const TextColon* merge );
|
||||
~TextColon() override = default;
|
||||
virtual ~TextColon() = default;
|
||||
|
||||
|
||||
/////////////////////////////////
|
||||
|
||||
@@ -42,7 +42,7 @@ namespace glabels
|
||||
private:
|
||||
TextColonKeys();
|
||||
TextColonKeys( const TextColonKeys* merge );
|
||||
~TextColonKeys() override = default;
|
||||
virtual ~TextColonKeys() = default;
|
||||
|
||||
|
||||
/////////////////////////////////
|
||||
|
||||
@@ -42,7 +42,7 @@ namespace glabels
|
||||
private:
|
||||
TextCsv();
|
||||
TextCsv( const TextCsv* merge );
|
||||
~TextCsv() override = default;
|
||||
virtual ~TextCsv() = default;
|
||||
|
||||
|
||||
/////////////////////////////////
|
||||
|
||||
@@ -42,7 +42,7 @@ namespace glabels
|
||||
private:
|
||||
TextCsvKeys();
|
||||
TextCsvKeys( const TextCsvKeys* merge );
|
||||
~TextCsvKeys() override = default;
|
||||
virtual ~TextCsvKeys() = default;
|
||||
|
||||
|
||||
/////////////////////////////////
|
||||
|
||||
@@ -42,7 +42,7 @@ namespace glabels
|
||||
private:
|
||||
TextSemicolon();
|
||||
TextSemicolon( const TextSemicolon* merge );
|
||||
~TextSemicolon() override = default;
|
||||
virtual ~TextSemicolon() = default;
|
||||
|
||||
|
||||
/////////////////////////////////
|
||||
|
||||
@@ -42,7 +42,7 @@ namespace glabels
|
||||
private:
|
||||
TextSemicolonKeys();
|
||||
TextSemicolonKeys( const TextSemicolonKeys* merge );
|
||||
~TextSemicolonKeys() override = default;
|
||||
virtual ~TextSemicolonKeys() = default;
|
||||
|
||||
|
||||
/////////////////////////////////
|
||||
|
||||
@@ -42,7 +42,7 @@ namespace glabels
|
||||
private:
|
||||
TextTsv();
|
||||
TextTsv( const TextTsv* merge );
|
||||
~TextTsv() override = default;
|
||||
virtual ~TextTsv() = default;
|
||||
|
||||
|
||||
/////////////////////////////////
|
||||
|
||||
@@ -42,7 +42,7 @@ namespace glabels
|
||||
private:
|
||||
TextTsvKeys();
|
||||
TextTsvKeys( const TextTsvKeys* merge );
|
||||
~TextTsvKeys() override = default;
|
||||
virtual ~TextTsvKeys() = default;
|
||||
|
||||
|
||||
/////////////////////////////////
|
||||
|
||||
Reference in New Issue
Block a user