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 "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;

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"
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;
}

View File

@@ -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;
};

View File

@@ -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 +=

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 \
QT_DISABLE_DEPRECATED_BEFORE=0x060000 \