Implementation, tests and first use of rangechecked_cast

This commit is contained in:
eelke 2019-11-04 18:02:48 +01:00
parent c5f6da48ce
commit f875f0f012
8 changed files with 61 additions and 5 deletions

View file

@ -1,5 +1,5 @@
#include "BackupFormatModel.h"
#include "rangechecked_cast.h"
#include <vector>
namespace {
@ -61,7 +61,7 @@ BackupFormatModel::BackupFormatModel(QObject *parent)
int BackupFormatModel::rowCount(const QModelIndex &) const
{
int size = g_BackupFormats.size();
int size = rangechecked_cast<int>(g_BackupFormats.size());
return size;
}
@ -79,7 +79,7 @@ QVariant BackupFormatModel::data(const QModelIndex &index, int role) const
const int col = index.column();
if (role == Qt::DisplayRole) {
const auto &item = g_BackupFormats.at(row);
const auto &item = g_BackupFormats.at(rangechecked_cast<size_t>(row));
switch (col) {
case ColumnShort:
result = item.shortFlag;
@ -93,7 +93,7 @@ QVariant BackupFormatModel::data(const QModelIndex &index, int role) const
}
}
else if (role == Qt::ToolTipRole) {
const auto &item = g_BackupFormats.at(row);
const auto &item = g_BackupFormats.at(rangechecked_cast<size_t>(row));
result = item.description;
}
}

View file

@ -1,5 +1,6 @@
#include "ExplainTreeModelItem.h"
#include "json/json.h"
#include "rangechecked_cast.h"
#include <limits>
namespace {
@ -110,7 +111,7 @@ ExplainTreeModelItemPtr ExplainTreeModelItem::child(int row)
int ExplainTreeModelItem::childCount() const
{
return m_childItems.size();
return rangechecked_cast<int>(m_childItems.size());
}
//int ExplainTreeModelItem::columnCount() const

View file

@ -56,6 +56,7 @@ HEADERS += PasswordManager.h \
SqlAstSelectListEntry.h \
SqlAstSelect.h \
SqlAstExpression.h \
rangechecked_cast.h \
std_utils.h \
IntegerRange.h

15
core/rangechecked_cast.h Normal file
View file

@ -0,0 +1,15 @@
#ifndef RANGECHECKED_CAST_H
#define RANGECHECKED_CAST_H
#include <boost/assert.hpp>
#include <limits>
template <typename To, typename From>
To rangechecked_cast(From f)
{
BOOST_ASSERT(f > std::numeric_limits<To>::lowest());
BOOST_ASSERT(f < std::numeric_limits<To>::max());
return static_cast<To>(f);
}
#endif // RANGECHECKED_CAST_H