refs #649, refs #656, adjusted flags

* removed now outdated enums
* sorted enums (better debugging)
* utility functions
This commit is contained in:
Klaus Basan
2016-05-24 00:28:03 +02:00
parent 0be85cf4fe
commit e5f8a5108f
4 changed files with 92 additions and 47 deletions

View File

@@ -7,9 +7,7 @@
* contained in the LICENSE file. * contained in the LICENSE file.
*/ */
//! \cond PRIVATE #include "webreaderflags.h"
#include "blackcore/webreaderflags.h"
using namespace BlackMisc::Network; using namespace BlackMisc::Network;
@@ -32,6 +30,11 @@ namespace BlackCore
f |= ModelReader; f |= ModelReader;
} }
if (entity.testFlag(CEntityFlags::InfoObjectEntity))
{
f |= InfoDataReader;
}
if (entity.testFlag(CEntityFlags::BookingEntity)) if (entity.testFlag(CEntityFlags::BookingEntity))
{ {
f |= VatsimBookingReader; f |= VatsimBookingReader;
@@ -56,9 +59,7 @@ namespace BlackCore
bool CWebReaderFlags::isFromSwiftDb(WebReader reader) bool CWebReaderFlags::isFromSwiftDb(WebReader reader)
{ {
return reader.testFlag(ModelReader) || reader.testFlag(IcaoDataReader); return reader.testFlag(ModelReader) || reader.testFlag(IcaoDataReader) || reader.testFlag(InfoDataReader);
} }
} // namespace } // namespace
//! \endcond

View File

@@ -35,38 +35,26 @@ namespace BlackCore
VatsimMetarReader = 1 << 2, //!< reader for VATSIM metar data VatsimMetarReader = 1 << 2, //!< reader for VATSIM metar data
IcaoDataReader = 1 << 3, //!< reader for ICAO data IcaoDataReader = 1 << 3, //!< reader for ICAO data
ModelReader = 1 << 4, //!< reader for model data such as liveries, models, etc ModelReader = 1 << 4, //!< reader for model data such as liveries, models, etc
InfoDataReader = 1 << 5, //!< DB info data (metdata, how many data, when updated)
AllVatsimReaders = VatsimBookingReader | VatsimDataReader | VatsimMetarReader, //!< all readers AllVatsimReaders = VatsimBookingReader | VatsimDataReader | VatsimMetarReader, //!< all readers
AllSwiftDbReaders = IcaoDataReader | ModelReader, //!< all swift data AllSwiftDbReaders = IcaoDataReader | ModelReader | InfoDataReader, //!< all swift data
AllReaders = AllSwiftDbReaders | AllVatsimReaders //!< everything AllReaders = AllSwiftDbReaders | AllVatsimReaders //!< everything
}; };
Q_DECLARE_FLAGS(WebReader, WebReaderFlag) Q_DECLARE_FLAGS(WebReader, WebReaderFlag)
//! How to read DB data
enum DbReaderHintFlag
{
NoHint = 0,
FromDb = 1 << 1, //!< directly from DB
FromJsonFile = 1 << 2, //!< from the JSON files
FromCache = 1 << 3, //!< try cache first
};
Q_DECLARE_FLAGS(DbReaderHint, DbReaderHintFlag)
//! Relationship between reader and entity //! Relationship between reader and entity
static WebReader entityToReader(BlackMisc::Network::CEntityFlags::Entity entity); static WebReader entityToReader(BlackMisc::Network::CEntityFlags::Entity entity);
//! Read from swift DB //! Reads from swift DB?
static bool isFromSwiftDb(BlackMisc::Network::CEntityFlags::Entity entity); static bool isFromSwiftDb(BlackMisc::Network::CEntityFlags::Entity entity);
//! Read from swift DB //! Reader for swift DB?
static bool isFromSwiftDb(WebReader reader); static bool isFromSwiftDb(WebReader reader);
}; };
} // namespace } // namespace
Q_DECLARE_METATYPE(BlackCore::CWebReaderFlags::WebReaderFlag) Q_DECLARE_METATYPE(BlackCore::CWebReaderFlags::WebReaderFlag)
Q_DECLARE_METATYPE(BlackCore::CWebReaderFlags::WebReader) Q_DECLARE_METATYPE(BlackCore::CWebReaderFlags::WebReader)
Q_DECLARE_METATYPE(BlackCore::CWebReaderFlags::DbReaderHintFlag)
Q_DECLARE_METATYPE(BlackCore::CWebReaderFlags::DbReaderHint)
Q_DECLARE_OPERATORS_FOR_FLAGS(BlackCore::CWebReaderFlags::WebReader) Q_DECLARE_OPERATORS_FOR_FLAGS(BlackCore::CWebReaderFlags::WebReader)
Q_DECLARE_OPERATORS_FOR_FLAGS(BlackCore::CWebReaderFlags::DbReaderHint)
#endif #endif

View File

@@ -12,6 +12,7 @@
#include <QStringList> #include <QStringList>
#include <QtGlobal> #include <QtGlobal>
#include <bitset>
namespace BlackMisc namespace BlackMisc
{ {
@@ -21,18 +22,20 @@ namespace BlackMisc
{ {
switch (flag) switch (flag)
{ {
case NoEntity: return "no data";
case BookingEntity: return "VATSIM bookings";
case VatsimDataFile: return "VATSIM data file";
case AircraftIcaoEntity: return "Aircraft ICAO"; case AircraftIcaoEntity: return "Aircraft ICAO";
case AirlineIcaoEntity: return "Airline ICAO"; case AirlineIcaoEntity: return "Airline ICAO";
case AllEntities: return "All";
case AllIcaoAndCountries: return "All ICAO + country";
case AllIcaoEntities: return "All ICAO";
case BookingEntity: return "VATSIM bookings";
case CountryEntity: return "Country"; case CountryEntity: return "Country";
case DistributorEntity: return "Distributor"; case DistributorEntity: return "Distributor";
case InfoObjectEntity: return "Info objects";
case LiveryEntity: return "Livery"; case LiveryEntity: return "Livery";
case ModelEntity: return "Model"; case ModelEntity: return "Model";
case AllIcaoEntities: return "All ICAO"; case NoEntity: return "no data";
case AllIcaoAndCountries: return "All ICAO + country"; case VatsimDataFile: return "VATSIM data file";
case AllEntities: return "All"; case VatsimStatusFile: return "VATSIM status file";
default: default:
BLACK_VERIFY_X(false, Q_FUNC_INFO, "wrong flags"); BLACK_VERIFY_X(false, Q_FUNC_INFO, "wrong flags");
return "wrong flags"; return "wrong flags";
@@ -42,18 +45,31 @@ namespace BlackMisc
QString CEntityFlags::flagToString(BlackMisc::Network::CEntityFlags::Entity flag) QString CEntityFlags::flagToString(BlackMisc::Network::CEntityFlags::Entity flag)
{ {
QStringList list; QStringList list;
if (flag.testFlag(NoEntity)) list << "no data";
if (flag.testFlag(BookingEntity)) list << "VATSIM bookings";
if (flag.testFlag(VatsimDataFile)) list << "VATSIM data file";
if (flag.testFlag(AircraftIcaoEntity)) list << "Aircraft ICAO"; if (flag.testFlag(AircraftIcaoEntity)) list << "Aircraft ICAO";
if (flag.testFlag(AirlineIcaoEntity)) list << "Airline ICAO"; if (flag.testFlag(AirlineIcaoEntity)) list << "Airline ICAO";
if (flag.testFlag(BookingEntity)) list << "VATSIM bookings";
if (flag.testFlag(CountryEntity)) list << "Country"; if (flag.testFlag(CountryEntity)) list << "Country";
if (flag.testFlag(DistributorEntity)) list << "Distributor"; if (flag.testFlag(DistributorEntity)) list << "Distributor";
if (flag.testFlag(InfoObjectEntity)) list << "Info objects";
if (flag.testFlag(LiveryEntity)) list << "Livery"; if (flag.testFlag(LiveryEntity)) list << "Livery";
if (flag.testFlag(ModelEntity)) list << "Model"; if (flag.testFlag(ModelEntity)) list << "Model";
if (flag.testFlag(NoEntity)) list << "no data";
if (flag.testFlag(VatsimDataFile)) list << "VATSIM data file";
if (flag.testFlag(VatsimStatusFile)) list << "VATSIM status file";
return list.join(','); return list.join(',');
} }
bool CEntityFlags::isSingleEntity(BlackMisc::Network::CEntityFlags::Entity flag)
{
return numberOfEntities(flag) == 1;
}
int CEntityFlags::numberOfEntities(BlackMisc::Network::CEntityFlags::Entity flag)
{
const int c = std::bitset<sizeof(flag)>(flag).count();
return c;
}
QString CEntityFlags::flagToString(CEntityFlags::ReadState flag) QString CEntityFlags::flagToString(CEntityFlags::ReadState flag)
{ {
switch (flag) switch (flag)
@@ -84,6 +100,22 @@ namespace BlackMisc
} }
} }
CEntityFlags::EntityFlag CEntityFlags::entityToEntityFlag(Entity entity)
{
return static_cast<EntityFlag>(static_cast<int>(entity));
}
CEntityFlags::Entity CEntityFlags::iterateDbEntities(Entity &entities)
{
if (entities == NoEntity || entities == InfoObjectEntity) { return NoEntity; }
if (entities.testFlag(AircraftIcaoEntity)) { entities &= ~AircraftIcaoEntity; return AircraftIcaoEntity; }
if (entities.testFlag(AirlineIcaoEntity)) { entities &= ~AirlineIcaoEntity; return AirlineIcaoEntity; }
if (entities.testFlag(LiveryEntity)) { entities &= ~LiveryEntity; return LiveryEntity; }
if (entities.testFlag(CountryEntity)) { entities &= ~CountryEntity; return CountryEntity; }
if (entities.testFlag(ModelEntity)) { entities &= ~ModelEntity; return ModelEntity; }
return NoEntity;
}
bool CEntityFlags::isWarningOrAbove(CEntityFlags::ReadState state) bool CEntityFlags::isWarningOrAbove(CEntityFlags::ReadState state)
{ {
CStatusMessage::StatusSeverity s = flagToSeverity(state); CStatusMessage::StatusSeverity s = flagToSeverity(state);
@@ -97,6 +129,14 @@ namespace BlackMisc
} }
} }
bool CEntityFlags::anySwiftDbEntity(Entity entities)
{
return
entities.testFlag(AircraftIcaoEntity) || entities.testFlag(AirlineIcaoEntity) ||
entities.testFlag(CountryEntity) ||
entities.testFlag(ModelEntity) || entities.testFlag(LiveryEntity);
}
void CEntityFlags::registerMetadata() void CEntityFlags::registerMetadata()
{ {
// this is no value class and I register enums here, // this is no value class and I register enums here,

View File

@@ -32,22 +32,23 @@ namespace BlackMisc
//! Which data to read, requires corresponding readers //! Which data to read, requires corresponding readers
enum EntityFlag enum EntityFlag
{ {
NoEntity = 0, //!< no data at all NoEntity = 0, //!< no data at all
BookingEntity = 1 << 0, //!< bookings InfoObjectEntity = 1 << 0, //!< info about DB data (kinf of metadata)
MetarEntity = 1 << 1, //!< METAR AircraftIcaoEntity = 1 << 1, //!< ICAO codes for aircraft
AircraftIcaoEntity = 1 << 2, //!< ICAO codes for aircraft AirlineIcaoEntity = 1 << 2, //!< ICAO codes for airlines
AirlineIcaoEntity = 1 << 3, //!< ICAO codes for airlines CountryEntity = 1 << 3, //!< country codes
CountryEntity = 1 << 4, //!< country codes DistributorEntity = 1 << 4, //!< distributors
DistributorEntity = 1 << 5, //!< distributors LiveryEntity = 1 << 5, //!< liveries
LiveryEntity = 1 << 6, //!< liveries ModelEntity = 1 << 6, //!< models
ModelEntity = 1 << 7, //!< models BookingEntity = 1 << 7, //!< bookings
VatsimDataFile = 1 << 8, //!< the VATSIM data file (multiple data entities) MetarEntity = 1 << 8, //!< METAR
VatsimStatusFile = 1 << 9, //!< the VATSIM status file (URLs for data files etc.) VatsimDataFile = 1 << 9, //!< the VATSIM data file (multiple data entities)
AllEntities = ((1<<10)-1), //!< everything VatsimStatusFile = 1 << 10, //!< the VATSIM status file (URLs for data files etc.)
AllIcaoEntities = AircraftIcaoEntity | AirlineIcaoEntity, //!< all ICAO codes AllEntities = ((1 << 11) - 1), //!< everything
AllIcaoAndCountries = AircraftIcaoEntity | AirlineIcaoEntity | CountryEntity, //!< all ICAO codes and countries AllIcaoEntities = AircraftIcaoEntity | AirlineIcaoEntity, //!< all ICAO codes
DistributorLiveryModel = DistributorEntity | LiveryEntity | ModelEntity, //!< Combinded AllIcaoAndCountries = AircraftIcaoEntity | AirlineIcaoEntity | CountryEntity, //!< all ICAO codes and countries
AllDbEntities = AllIcaoEntities | DistributorLiveryModel, //!< All DB stuff DistributorLiveryModel = DistributorEntity | LiveryEntity | ModelEntity, //!< Combinded
AllDbEntities = AllIcaoEntities | DistributorLiveryModel | InfoObjectEntity //!< All DB stuff
}; };
Q_DECLARE_FLAGS(Entity, EntityFlag) Q_DECLARE_FLAGS(Entity, EntityFlag)
@@ -66,15 +67,30 @@ namespace BlackMisc
//! Convert to string //! Convert to string
static QString flagToString(BlackMisc::Network::CEntityFlags::Entity flag); static QString flagToString(BlackMisc::Network::CEntityFlags::Entity flag);
//! Representing single entity?
static bool isSingleEntity(BlackMisc::Network::CEntityFlags::Entity flag);
//! Represented number of entities
static int numberOfEntities(BlackMisc::Network::CEntityFlags::Entity flag);
//! Convert to string //! Convert to string
static QString flagToString(ReadState flag); static QString flagToString(ReadState flag);
//! Flag to severity //! Flag to severity
static BlackMisc::CStatusMessage::StatusSeverity flagToSeverity(ReadState state); static BlackMisc::CStatusMessage::StatusSeverity flagToSeverity(ReadState state);
//! To flag
static EntityFlag entityToEntityFlag(Entity entity);
//! Return single entity and remove it from entities
static Entity iterateDbEntities(Entity &entities);
//! Read state representing warning or above? //! Read state representing warning or above?
static bool isWarningOrAbove(ReadState state); static bool isWarningOrAbove(ReadState state);
//! Representing at least one DB entity
static bool anySwiftDbEntity(Entity entities);
//! Register metadata //! Register metadata
static void registerMetadata(); static void registerMetadata();
}; };