#648
This commit is contained in:
Klaus Basan
2016-05-08 20:03:54 +02:00
committed by Roland Winklmeier
parent 4b11eb3f83
commit 49094115b1
4 changed files with 19 additions and 4 deletions

View File

@@ -9,6 +9,8 @@
#include "listmodeldbobjects.h" #include "listmodeldbobjects.h"
#include "allmodelcontainers.h" #include "allmodelcontainers.h"
#include "blackmisc/datastoreobjectlist.h"
#include <type_traits>
using namespace BlackMisc; using namespace BlackMisc;
using namespace BlackMisc::Aviation; using namespace BlackMisc::Aviation;
@@ -21,7 +23,9 @@ namespace BlackGui
CListModelDbObjects<ObjectType, ContainerType, KeyType, UseCompare>::CListModelDbObjects(const QString &translationContext, QObject *parent) : CListModelDbObjects<ObjectType, ContainerType, KeyType, UseCompare>::CListModelDbObjects(const QString &translationContext, QObject *parent) :
CListModelBase<ObjectType, ContainerType, UseCompare>(translationContext, parent) CListModelBase<ObjectType, ContainerType, UseCompare>(translationContext, parent)
{ {
// void constexpr bool hasIntegerKey = std::is_base_of<IDatastoreObjectWithIntegerKey, ObjectType>::value && std::is_same<int, KeyType>::value;
constexpr bool hasStringKey = std::is_base_of<IDatastoreObjectWithStringKey, ObjectType>::value && std::is_base_of<QString, KeyType>::value;
static_assert(hasIntegerKey || hasStringKey, "ObjectType needs to implement IDatastoreObjectWithXXXXKey and have appropriate KeyType");
} }
template <typename ObjectType, typename ContainerType, typename KeyType, bool UseCompare> template <typename ObjectType, typename ContainerType, typename KeyType, bool UseCompare>

View File

@@ -17,12 +17,17 @@
#include "blackmisc/simulation/distributorlist.h" #include "blackmisc/simulation/distributorlist.h"
#include <algorithm> #include <algorithm>
#include <iterator> #include <iterator>
#include <type_traits>
namespace BlackMisc namespace BlackMisc
{ {
template <class OBJ, class CONTAINER, typename KEYTYPE> template <class OBJ, class CONTAINER, typename KEYTYPE>
IDatastoreObjectList<OBJ, CONTAINER, KEYTYPE>::IDatastoreObjectList() IDatastoreObjectList<OBJ, CONTAINER, KEYTYPE>::IDatastoreObjectList()
{ } {
constexpr bool hasIntegerKey = std::is_base_of<IDatastoreObjectWithIntegerKey, OBJ>::value && std::is_same<int, KEYTYPE>::value;
constexpr bool hasStringKey = std::is_base_of<IDatastoreObjectWithStringKey, OBJ>::value && std::is_base_of<QString, KEYTYPE>::value;
static_assert(hasIntegerKey || hasStringKey, "ObjectType needs to implement IDatastoreObjectWithXXXXKey and have appropriate KeyType");
}
template <class OBJ, class CONTAINER, typename KEYTYPE> template <class OBJ, class CONTAINER, typename KEYTYPE>
OBJ IDatastoreObjectList<OBJ, CONTAINER, KEYTYPE>::findByKey(KEYTYPE key, const OBJ &notFound) const OBJ IDatastoreObjectList<OBJ, CONTAINER, KEYTYPE>::findByKey(KEYTYPE key, const OBJ &notFound) const

View File

@@ -12,12 +12,15 @@
#include "blackmisc/simulation/aircraftmodellist.h" #include "blackmisc/simulation/aircraftmodellist.h"
#include <algorithm> #include <algorithm>
#include <iterator> #include <iterator>
#include <type_traits>
namespace BlackMisc namespace BlackMisc
{ {
template <class OBJ, class CONTAINER> template <class OBJ, class CONTAINER>
IOrderableList<OBJ, CONTAINER>::IOrderableList() IOrderableList<OBJ, CONTAINER>::IOrderableList()
{ } {
static_assert(std::is_base_of<IOrderable, OBJ>::value, "OBJ needs to implement IOrderable");
}
template <class OBJ, class CONTAINER> template <class OBJ, class CONTAINER>
const CONTAINER &IOrderableList<OBJ, CONTAINER>::container() const const CONTAINER &IOrderableList<OBJ, CONTAINER>::container() const

View File

@@ -22,12 +22,15 @@
#include "blackmisc/countrylist.h" #include "blackmisc/countrylist.h"
#include <algorithm> #include <algorithm>
#include <iterator> #include <iterator>
#include <type_traits>
namespace BlackMisc namespace BlackMisc
{ {
template <class OBJ, class CONTAINER> template <class OBJ, class CONTAINER>
ITimestampObjectList<OBJ, CONTAINER>::ITimestampObjectList() ITimestampObjectList<OBJ, CONTAINER>::ITimestampObjectList()
{ } {
static_assert(std::is_base_of<ITimestampBased, OBJ>::value, "OBJ needs to implement ITimestampBased");
}
template <class OBJ, class CONTAINER> template <class OBJ, class CONTAINER>
const CONTAINER &ITimestampObjectList<OBJ, CONTAINER>::container() const const CONTAINER &ITimestampObjectList<OBJ, CONTAINER>::container() const