Replace bool * array by std::vector<char> in MultiFilterInterface

This replaces a dynamically allocated array of bool by std::vector<char>.
1) This makes the code shorter and less error prone, because memory
   management has not to be done by hand.
2) It fixes a bug in the old code:
   memset(checkState, false, list.count()) is wrong, because bool is
   not guaranteed to be the same size as char!

Two notes:
1) QMap<>, QVector<>, etc. are used numerous times in the code, so
   this doesn't introduce a new C++ concept. Here, the std:: version
   is used, because there is no need for reference counting, COW
   semantics, etc.
2) std::vector<char> is used instead of std::vector<bool>, because
   the latter does a pessimization where a bitfield is used!

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
Berthold Stoeger 2017-11-25 15:04:38 +01:00 committed by Dirk Hohndel
parent 739b27427c
commit 4da6a0a732
2 changed files with 13 additions and 20 deletions

View file

@ -5,13 +5,14 @@
#include <QStringListModel>
#include <QSortFilterProxyModel>
#include <stdint.h>
#include <vector>
class MultiFilterInterface {
public:
MultiFilterInterface() : checkState(NULL), anyChecked(false) {}
MultiFilterInterface() : anyChecked(false) {}
virtual bool doFilter(struct dive *d, QModelIndex &index0, QAbstractItemModel *sourceModel) const = 0;
virtual void clearFilter() = 0;
bool *checkState;
std::vector<char> checkState;
bool anyChecked;
};