Added more macros for messages
This commit is contained in:
@@ -5,24 +5,10 @@
|
||||
#include <QMap>
|
||||
|
||||
#include "messagingcorelib_global.h"
|
||||
#include "dbmsgmacros.h"
|
||||
|
||||
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
|
||||
{
|
||||
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"
|
||||
|
||||
const QMap<QString, MyMessage::FieldGetterMethod> MyMessage::m_fields {
|
||||
IMPLEMENT_DBMESSAGE(MyMessage) {
|
||||
{ "name", &MyMessage::nameFieldBase },
|
||||
{ "birthday", &MyMessage::birthdayFieldBase },
|
||||
{ "sendTimestamp", &MyMessage::sendTimestampFieldBase },
|
||||
@@ -8,33 +8,8 @@ const QMap<QString, MyMessage::FieldGetterMethod> MyMessage::m_fields {
|
||||
{ "weight", &MyMessage::weightFieldBase }
|
||||
};
|
||||
|
||||
MyMessage::MyMessage() :
|
||||
DbMsgBase()
|
||||
{
|
||||
}
|
||||
|
||||
MyMessage::MyMessage(const QString &name, const QDate &birthday, const QDateTime &sendTimestamp, int age, double weight) :
|
||||
DbMsgBase(),
|
||||
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
|
||||
{
|
||||
typedef DbMsgFieldBase &(MyMessage::*FieldGetterMethod)();
|
||||
static const QMap<QString, FieldGetterMethod> m_fields;
|
||||
DECLARE_DBMESSAGE(MyMessage)
|
||||
|
||||
public:
|
||||
MyMessage();
|
||||
MyMessage(const QString &name, const QDate &birthday, const QDateTime &sendTimestamp, int age, double weight);
|
||||
|
||||
DECLARE_DBFIELD(QString, name, Name)
|
||||
@@ -24,8 +22,4 @@ public:
|
||||
DECLARE_DBFIELD(QDateTime, sendTimestamp, SendTimestamp)
|
||||
DECLARE_DBFIELD(int, age, Age)
|
||||
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
|
||||
|
||||
SOURCES += \
|
||||
dbmsgfieldbase.cpp \
|
||||
dbmsgbase.cpp \
|
||||
dbmsgfieldbase.cpp \
|
||||
messages/mymessage.cpp
|
||||
|
||||
HEADERS += messagingcorelib_global.h \
|
||||
dbmsgfieldbase.h \
|
||||
dbmsgfield.h \
|
||||
HEADERS += \
|
||||
dbmsgbase.h \
|
||||
dbmsgfield.h \
|
||||
dbmsgfieldbase.h \
|
||||
dbmsgmacros.h \
|
||||
messagingcorelib_global.h \
|
||||
messages/mymessage.h
|
||||
|
||||
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 \
|
||||
QT_DISABLE_DEPRECATED_BEFORE=0x060000 \
|
||||
|
Reference in New Issue
Block a user