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:
Jaye Evins
2025-10-31 16:11:28 -04:00
committed by GitHub
parent fd10d88be5
commit 8c8e447336
159 changed files with 3364 additions and 4045 deletions
+19 -58
View File
@@ -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 );
}
+9 -9
View File
@@ -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;
};
}
+2 -2
View File
@@ -108,9 +108,9 @@ namespace glabels
///
/// Read next record
///
Record* None::readNextRecord()
Record None::readNextRecord()
{
return nullptr;
return NullRecord();
}
} // namespace merge
+2 -2
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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();
}
+3 -2
View File
@@ -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;
/////////////////////////////////
+1 -1
View File
@@ -42,7 +42,7 @@ namespace glabels
private:
TextColon();
TextColon( const TextColon* merge );
~TextColon() override = default;
virtual ~TextColon() = default;
/////////////////////////////////
+1 -1
View File
@@ -42,7 +42,7 @@ namespace glabels
private:
TextColonKeys();
TextColonKeys( const TextColonKeys* merge );
~TextColonKeys() override = default;
virtual ~TextColonKeys() = default;
/////////////////////////////////
+1 -1
View File
@@ -42,7 +42,7 @@ namespace glabels
private:
TextCsv();
TextCsv( const TextCsv* merge );
~TextCsv() override = default;
virtual ~TextCsv() = default;
/////////////////////////////////
+1 -1
View File
@@ -42,7 +42,7 @@ namespace glabels
private:
TextCsvKeys();
TextCsvKeys( const TextCsvKeys* merge );
~TextCsvKeys() override = default;
virtual ~TextCsvKeys() = default;
/////////////////////////////////
+1 -1
View File
@@ -42,7 +42,7 @@ namespace glabels
private:
TextSemicolon();
TextSemicolon( const TextSemicolon* merge );
~TextSemicolon() override = default;
virtual ~TextSemicolon() = default;
/////////////////////////////////
+1 -1
View File
@@ -42,7 +42,7 @@ namespace glabels
private:
TextSemicolonKeys();
TextSemicolonKeys( const TextSemicolonKeys* merge );
~TextSemicolonKeys() override = default;
virtual ~TextSemicolonKeys() = default;
/////////////////////////////////
+1 -1
View File
@@ -42,7 +42,7 @@ namespace glabels
private:
TextTsv();
TextTsv( const TextTsv* merge );
~TextTsv() override = default;
virtual ~TextTsv() = default;
/////////////////////////////////
+1 -1
View File
@@ -42,7 +42,7 @@ namespace glabels
private:
TextTsvKeys();
TextTsvKeys( const TextTsvKeys* merge );
~TextTsvKeys() override = default;
virtual ~TextTsvKeys() = default;
/////////////////////////////////