Added more macros for messages

This commit is contained in:
0xFEEDC0DE64
2018-09-02 14:06:11 +02:00
parent d19047e580
commit fbdcb054a3
6 changed files with 61 additions and 53 deletions

View File

@@ -5,24 +5,10 @@
#include <QMap> #include <QMap>
#include "messagingcorelib_global.h" #include "messagingcorelib_global.h"
#include "dbmsgmacros.h"
class DbMsgFieldBase; class DbMsgFieldBase;
#define DECLARE_DBFIELD(TYPE, NAME, UPPER_NAME) \
private: \
DbMsgField<TYPE> m_##NAME;\
\
public: \
inline TYPE get##UPPER_NAME() const { return m_##NAME.getValue(); } \
inline void set##UPPER_NAME(const TYPE &NAME) { m_##NAME.setValue(NAME); } \
inline bool has##UPPER_NAME() const { return m_##NAME.hasValue(); } \
inline void clear##UPPER_NAME() { m_##NAME.clear(); } \
\
inline DbMsgField<TYPE> &NAME##Field() { return m_##NAME; } \
inline const DbMsgField<TYPE> &NAME##Field() const { return m_##NAME; } \
inline DbMsgFieldBase &NAME##FieldBase() { return m_##NAME; } \
inline const DbMsgFieldBase &NAME##FieldBase() const { return m_##NAME; }
class MESSAGINGCORELIBSHARED_EXPORT DbMsgBase class MESSAGINGCORELIBSHARED_EXPORT DbMsgBase
{ {
static const QString m_clearedFieldsName; static const QString m_clearedFieldsName;

View File

@@ -0,0 +1,51 @@
#pragma once
#define DECLARE_DBFIELD(TYPE, NAME, UPPER_NAME) \
private: \
DbMsgField<TYPE> m_##NAME;\
\
public: \
inline TYPE get##UPPER_NAME() const { return m_##NAME.getValue(); } \
inline void set##UPPER_NAME(const TYPE &NAME) { m_##NAME.setValue(NAME); } \
inline bool has##UPPER_NAME() const { return m_##NAME.hasValue(); } \
inline void clear##UPPER_NAME() { m_##NAME.clear(); } \
\
inline DbMsgField<TYPE> &NAME##Field() { return m_##NAME; } \
inline const DbMsgField<TYPE> &NAME##Field() const { return m_##NAME; } \
inline DbMsgFieldBase &NAME##FieldBase() { return m_##NAME; } \
inline const DbMsgFieldBase &NAME##FieldBase() const { return m_##NAME; }
#define DECLARE_DBMESSAGE(ClassName) \
public: \
ClassName() = default; \
ClassName(const ClassName &) = default; \
ClassName(ClassName &&) = default; \
protected: \
QMap<QString, DbMsgFieldBase*> getFields() override; \
QMap<QString, const DbMsgFieldBase*> getFields() const override; \
private: \
typedef DbMsgFieldBase &(ClassName::*FieldGetterMethod)(); \
static const QMap<QString, FieldGetterMethod> ALL_FIELDS;
#define IMPLEMENT_DBMESSAGE(ClassName) \
QMap<QString, DbMsgFieldBase *> ClassName::getFields() \
{ \
QMap<QString, DbMsgFieldBase*> fields; \
\
for(auto iter = ALL_FIELDS.cbegin(); iter != ALL_FIELDS.cend(); iter++) \
fields.insert(iter.key(), &(this->*iter.value())()); \
\
return fields; \
} \
\
QMap<QString, const DbMsgFieldBase *> ClassName::getFields() const \
{ \
QMap<QString, const DbMsgFieldBase*> fields; \
\
for(auto iter = ALL_FIELDS.cbegin(); iter != ALL_FIELDS.cend(); iter++) \
fields.insert(iter.key(), &(const_cast<ClassName*>(this)->*iter.value())()); \
\
return fields; \
} \
\
const QMap<QString, ClassName::FieldGetterMethod> ClassName::ALL_FIELDS

View File

@@ -1,6 +1,6 @@
#include "mymessage.h" #include "mymessage.h"
const QMap<QString, MyMessage::FieldGetterMethod> MyMessage::m_fields { IMPLEMENT_DBMESSAGE(MyMessage) {
{ "name", &MyMessage::nameFieldBase }, { "name", &MyMessage::nameFieldBase },
{ "birthday", &MyMessage::birthdayFieldBase }, { "birthday", &MyMessage::birthdayFieldBase },
{ "sendTimestamp", &MyMessage::sendTimestampFieldBase }, { "sendTimestamp", &MyMessage::sendTimestampFieldBase },
@@ -8,33 +8,8 @@ const QMap<QString, MyMessage::FieldGetterMethod> MyMessage::m_fields {
{ "weight", &MyMessage::weightFieldBase } { "weight", &MyMessage::weightFieldBase }
}; };
MyMessage::MyMessage() :
DbMsgBase()
{
}
MyMessage::MyMessage(const QString &name, const QDate &birthday, const QDateTime &sendTimestamp, int age, double weight) : MyMessage::MyMessage(const QString &name, const QDate &birthday, const QDateTime &sendTimestamp, int age, double weight) :
DbMsgBase(), DbMsgBase(),
m_name(name), m_birthday(birthday), m_sendTimestamp(sendTimestamp), m_age(age), m_weight(weight) m_name(name), m_birthday(birthday), m_sendTimestamp(sendTimestamp), m_age(age), m_weight(weight)
{ {
} }
QMap<QString, DbMsgFieldBase *> MyMessage::getFields()
{
QMap<QString, DbMsgFieldBase*> fields;
for(auto iter = m_fields.cbegin(); iter != m_fields.cend(); iter++)
fields.insert(iter.key(), &(this->*iter.value())());
return fields;
}
QMap<QString, const DbMsgFieldBase *> MyMessage::getFields() const
{
QMap<QString, const DbMsgFieldBase*> fields;
for(auto iter = m_fields.cbegin(); iter != m_fields.cend(); iter++)
fields.insert(iter.key(), &(const_cast<MyMessage*>(this)->*iter.value())());
return fields;
}

View File

@@ -12,11 +12,9 @@ class DbMsgFieldBase;
class MESSAGINGCORELIBSHARED_EXPORT MyMessage : public DbMsgBase class MESSAGINGCORELIBSHARED_EXPORT MyMessage : public DbMsgBase
{ {
typedef DbMsgFieldBase &(MyMessage::*FieldGetterMethod)(); DECLARE_DBMESSAGE(MyMessage)
static const QMap<QString, FieldGetterMethod> m_fields;
public: public:
MyMessage();
MyMessage(const QString &name, const QDate &birthday, const QDateTime &sendTimestamp, int age, double weight); MyMessage(const QString &name, const QDate &birthday, const QDateTime &sendTimestamp, int age, double weight);
DECLARE_DBFIELD(QString, name, Name) DECLARE_DBFIELD(QString, name, Name)
@@ -24,8 +22,4 @@ public:
DECLARE_DBFIELD(QDateTime, sendTimestamp, SendTimestamp) DECLARE_DBFIELD(QDateTime, sendTimestamp, SendTimestamp)
DECLARE_DBFIELD(int, age, Age) DECLARE_DBFIELD(int, age, Age)
DECLARE_DBFIELD(double, weight, Weight) DECLARE_DBFIELD(double, weight, Weight)
protected:
QMap<QString, DbMsgFieldBase*> getFields() override;
QMap<QString, const DbMsgFieldBase*> getFields() const override;
}; };

View File

@@ -9,14 +9,16 @@ PROJECT_ROOT = ..
DEFINES += MESSAGINGCORELIB_LIBRARY DEFINES += MESSAGINGCORELIB_LIBRARY
SOURCES += \ SOURCES += \
dbmsgfieldbase.cpp \
dbmsgbase.cpp \ dbmsgbase.cpp \
dbmsgfieldbase.cpp \
messages/mymessage.cpp messages/mymessage.cpp
HEADERS += messagingcorelib_global.h \ HEADERS += \
dbmsgfieldbase.h \
dbmsgfield.h \
dbmsgbase.h \ dbmsgbase.h \
dbmsgfield.h \
dbmsgfieldbase.h \
dbmsgmacros.h \
messagingcorelib_global.h \
messages/mymessage.h messages/mymessage.h
FORMS += FORMS +=

View File

@@ -1,4 +1,4 @@
CONFIG += qt console warn_on depend_includepath c++14 CONFIG += qt warn_on depend_includepath c++14
DEFINES += QT_DEPRECATED_WARNINGS \ DEFINES += QT_DEPRECATED_WARNINGS \
QT_DISABLE_DEPRECATED_BEFORE=0x060000 \ QT_DISABLE_DEPRECATED_BEFORE=0x060000 \