Added more macros for messages
This commit is contained in:
@@ -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;
|
||||||
|
51
messagingcorelib/dbmsgmacros.h
Normal file
51
messagingcorelib/dbmsgmacros.h
Normal 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
|
@@ -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;
|
|
||||||
}
|
|
||||||
|
@@ -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;
|
|
||||||
};
|
};
|
||||||
|
@@ -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 +=
|
||||||
|
@@ -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 \
|
||||||
|
Reference in New Issue
Block a user