Nut/src/defines.h

111 lines
5.8 KiB
C
Raw Normal View History

2016-05-12 14:08:58 +08:00
/**************************************************************************
**
** This file is part of Nut project.
** https://github.com/HamedMasafi/Nut
**
** Nut is free software: you can redistribute it and/or modify
** it under the terms of the GNU Lesser General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** Nut is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU Lesser General Public License for more details.
**
** You should have received a copy of the GNU Lesser General Public License
** along with Nut. If not, see <http://www.gnu.org/licenses/>.
**
**************************************************************************/
#ifndef SYNTAX_DEFINES_H
#define SYNTAX_DEFINES_H
2017-02-01 18:01:21 +08:00
#define NUT_NAMESPACE Nut
2016-05-12 14:08:58 +08:00
#include "defines_p.h"
2017-02-01 18:01:21 +08:00
#include "qglobal.h"
2016-05-12 14:08:58 +08:00
#ifdef NUT_COMPILE_STATIC
# define NUT_EXPORT
#else
# define NUT_EXPORT Q_DECL_EXPORT
#endif
#define NUT_INFO(type, name, value) \
2018-01-11 18:08:45 +08:00
Q_CLASSINFO(__nut_NAME_PERFIX type #name #value, type "\n" #name "\n" #value)
2016-05-12 14:08:58 +08:00
// Database
2017-10-07 19:45:20 +08:00
#define NUT_DB_VERSION(version) \
2018-01-11 17:36:48 +08:00
NUT_INFO(__nut_DB_VERSION, version, 0)
2016-05-12 14:08:58 +08:00
#define NUT_DECLARE_TABLE(type, name) \
2018-01-11 17:36:48 +08:00
NUT_INFO(__nut_TABLE, type, name) \
2016-05-12 14:08:58 +08:00
Q_PROPERTY(type* name READ name) \
2018-02-13 16:54:16 +08:00
Q_PROPERTY(NUT_WRAP_NAMESPACE(TableSet<type>) name##Table READ name##Table) \
2016-05-12 14:08:58 +08:00
type* m_##name; \
2018-02-13 16:54:16 +08:00
NUT_WRAP_NAMESPACE(TableSet<type>) *m_##name##Table; \
2016-05-12 14:08:58 +08:00
public: \
static const type _##name; \
type* name() const{ return m_##name; } \
2018-02-13 16:54:16 +08:00
NUT_WRAP_NAMESPACE(TableSet<type>) *name##Table() const { return m_##name##Table; }
2016-05-12 14:08:58 +08:00
//Table
#define NUT_DECLARE_FIELD(type, name, read, write) \
Q_PROPERTY(type name READ read WRITE write) \
2018-01-11 17:36:48 +08:00
NUT_INFO(__nut_FIELD, name, 0) \
2016-05-12 14:08:58 +08:00
type m_##name; \
public: \
2017-08-10 23:09:41 +08:00
static NUT_WRAP_NAMESPACE(FieldPhrase<type>) name ## Field(){ \
static NUT_WRAP_NAMESPACE(FieldPhrase<type>) f = NUT_WRAP_NAMESPACE(FieldPhrase<type>)(staticMetaObject.className(), #name); \
2016-05-21 16:09:03 +08:00
return f; \
} \
2016-05-12 14:08:58 +08:00
type read() const{ \
return m_##name; \
} \
void write(type name){ \
m_##name = name; \
propertyChanged(#name); \
}
2016-05-21 16:09:03 +08:00
#define NUT_FOREGION_KEY(type, keytype, name, read, write) \
2016-05-12 14:08:58 +08:00
Q_PROPERTY(type* name READ read WRITE write) \
2016-05-21 16:09:03 +08:00
NUT_DECLARE_FIELD(keytype, name##Id, read##Id, write##Id) \
2018-01-15 21:50:40 +08:00
NUT_INFO(__nut_FOREGION_KEY, name, type) \
2016-05-12 14:08:58 +08:00
type *m_##name; \
public: \
type *read() const { return m_##name ; } \
void write(type *name){ \
m_##name = name; \
}
2016-05-21 16:09:03 +08:00
#define NUT_DECLARE_CHILD_TABLE(type, n) \
2016-05-12 14:08:58 +08:00
private: \
NUT_WRAP_NAMESPACE(TableSet)<type> *m_##n; \
2016-05-12 14:08:58 +08:00
public: \
2018-01-09 05:44:01 +08:00
static type *n##Table(); \
NUT_WRAP_NAMESPACE(TableSet)<type> *n();
#define NUT_IMPLEMENT_CHILD_TABLE(class, type, n) \
type *class::n##Table(){ \
static type *f = new type(); \
return f; \
} \
NUT_WRAP_NAMESPACE(TableSet)<type> *class::n(){ \
return m_##n; \
}
2016-05-12 14:08:58 +08:00
2018-01-11 17:36:48 +08:00
#define NUT_PRIMARY_KEY(x) NUT_INFO(__nut_PRIMARY_KEY, x, 0)
#define NUT_AUTO_INCREMENT(x) NUT_INFO(__nut_AUTO_INCREMENT, x, 0)
2018-01-09 05:44:01 +08:00
#define NUT_PRIMARY_AUTO_INCREMENT(x) NUT_PRIMARY_KEY(x) \
NUT_AUTO_INCREMENT(x)
2018-02-13 23:39:21 +08:00
#define NUT_DISPLAY_NAME(field, name) NUT_INFO(__nut_DISPLAY, field, name)
2018-01-11 17:36:48 +08:00
#define NUT_UNIQUE(x) NUT_INFO(__nut_UNIQUE, x, 0)
#define NUT_LEN(field, len) NUT_INFO(__nut_LEN, field, len)
#define NUT_DEFAULT_VALUE(x, n) NUT_INFO(__nut_DEFAULT_VALUE, x, n)
#define NUT_NOT_NULL(x) NUT_INFO(__nut_NOT_NULL, x, 1)
2018-01-09 05:44:01 +08:00
#define NUT_INDEX(name, field, order)
2016-05-12 14:08:58 +08:00
#endif // SYNTAX_DEFINES_H