123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- // shmvar.h :
- //
- #if !defined(AGD_SHMVAR_H__8E807F2F_C6E5_4D6B_8193_F29943D450B3__INCLUDED_)
- #define AGD_SHMVAR_H__8E807F2F_C6E5_4D6B_8193_F29943D450B3__INCLUDED_
- #include <pthread.h>
- #include <QObject>
- #include <QVariant>
- #include <QByteArray>
- #include <gfa/gfaipc.h>
- #include <typeinfo>
- /////////////////////////////////////////////////////////////////////////////
- #define _TRACK_TYPES_AT_LOAD 0
- #define _TRACK_QT_WRITES 0
- /////////////////////////////////////////////////////////////////////////////
- typedef union _CHECK_UPDATE_SHM_RETVAL
- {
- struct
- {
- unsigned int nChecked;
- unsigned int nUpdated;
- };
- unsigned long long nRetval;
- }CHECK_UPDATE_SHM_RETVAL, *LPCHECK_UPDATE_SHM_RETVAL;
- typedef const CHECK_UPDATE_SHM_RETVAL *LPCCHECK_UPDATE_SHM_RETVAL;
- /////////////////////////////////////////////////////////////////////////////
- // shmvar.h - Declarations:
- class CShmVariable : public QObject
- {
- Q_OBJECT
- Q_PROPERTY(QVariant val READ val WRITE setVal NOTIFY valChanged USER true)
- Q_PROPERTY(unsigned int vt READ vt CONSTANT)
- public:
- enum VT
- {
- VT_Invalid,
- VT_bool,
- VT_I1,
- VT_UI1,
- VT_I2,
- VT_UI2,
- VT_I4,
- VT_UI4,
- VT_I8,
- VT_UI8,
- VT_float,
- VT_double,
- VT_string
- };
- Q_ENUM(VT)
-
- typedef union
- {
- void *pVoid;
- bool *pBool;
- signed char *pI1;
- unsigned char *pUI1;
- signed short *pI2;
- unsigned short *pUI2;
- signed int *pI4;
- unsigned int *pUI4;
- signed long long *pI8;
- unsigned long long *pUI8;
- float *pFloat;
- double *pDouble;
- }V_Ptr;
- typedef union
- {
- bool boolVal;
- signed char I1Val;
- unsigned char UI1Val;
- signed short I2Val;
- unsigned short UI2Val;
- signed int I4Val;
- unsigned int UI4Val;
- signed long long I8Val;
- unsigned long long UI8Val;
- float FloatVal;
- double DoubleVal;
- }V_Val;
- public:
- explicit CShmVariable(void *pData, const std::type_info &rti, HSHM hShm, const char *pszName, int nIndex, QObject *pParent = 0);
- virtual ~CShmVariable(void);
- QVariant val(void);
- void setVal(const QVariant &val);
- unsigned int vt(void) const;
- unsigned long long CheckUpdateShm(bool fLock);
- signals:
- void valChanged(const QVariant &val) const;
- private:
- void valRaw(QVariant &v);
- void emitChanged(bool fLock = false);
- void Lock(void);
- void Unlock(void);
- private:
- enum VT m_vt;
- volatile V_Ptr m_data;
- V_Val m_cache;
- HSHM m_hShm;
- QString m_varName;
- int m_nIndex;
- };
- /////////////////////////////////////////////////////////////////////////////
- class CShmStringVariable : public QObject
- {
- Q_OBJECT
- Q_PROPERTY(QString val READ val WRITE setVal NOTIFY valChanged USER true)
- Q_PROPERTY(unsigned int vt READ vt CONSTANT)
- public:
- typedef enum
- {
- VT_Invalid, // 0
- VT_Latin1, // 1
- VT_UTF_8, // 2
- VT_UTF_16, // 3
- VT_UTF_32, // 4
- VT_Unicode, // 5
- VT_Last
- }VT;
- typedef union
- {
- void *pVoid;
- char *pszMbs;
- char16_t *pszWc16;
- char32_t *pszWc32;
- wchar_t *pszWcs;
- }V_Ptr;
- public:
- explicit CShmStringVariable(void *pData, size_t nCChData, VT vt, const std::type_info &rti, HSHM hShm, const char *pszName, int nIndex, QObject *pParent = 0);
- virtual ~CShmStringVariable(void);
- QString val(void);
- void setVal(const QString &val);
- unsigned int vt(void) const;
- unsigned long long CheckUpdateShm(bool fLock);
- signals:
- void valChanged(const QString &val) const;
- private:
- void valRaw(QString &v);
- void emitChanged(bool fLock = false);
- bool shmChanged(bool fLock);
- void Lock(void);
- void Unlock(void);
- void zeroTerm(volatile V_Ptr &rp, size_t at);
- private:
- VT m_vt;
- volatile V_Ptr m_data;
- V_Ptr m_cache;
- size_t m_nCbBuffer;
- size_t m_nCbString;
- HSHM m_hShm;
- QString m_varName;
- int m_nIndex;
- };
- /////////////////////////////////////////////////////////////////////////////
- class CShmBitVariable : public QObject
- {
- Q_OBJECT
- Q_PROPERTY(QVariant val READ val WRITE setVal NOTIFY valChanged USER true)
- Q_PROPERTY(unsigned int vt READ vt CONSTANT)
- public:
- enum VT
- {
- VT_Invalid,
- VT_bool,
- VT_I1,
- VT_UI1,
- VT_I2,
- VT_UI2,
- VT_I4,
- VT_UI4,
- VT_I8,
- VT_UI8,
- VT_float,
- VT_double,
- VT_string
- };
- Q_ENUM(VT)
- public:
- explicit CShmBitVariable(void *pData, size_t nOffset, int nBitNr, HSHM hShm, const char *pszName, QObject *pParent = 0);
- virtual ~CShmBitVariable(void);
- QVariant val(void);
- void setVal(const QVariant &val);
- unsigned int vt(void) const;
- unsigned long long CheckUpdateShm(bool fLock);
- signals:
- void valChanged(const QVariant &val) const;
- private:
- void valRaw(QVariant &v);
- void emitChanged(bool fLock = false);
- void Lock(void);
- void Unlock(void);
- private:
- uint8_t *m_pShmByte;
- uint8_t m_mask;
- bool m_cacheVal;
- HSHM m_hShm;
- QString m_varName;
- int m_nIndex;
- int m_nBitNr;
- };
- /////////////////////////////////////////////////////////////////////////////
- #endif // !defined(AGD_SHMVAR_H__8E807F2F_C6E5_4D6B_8193_F29943D450B3__INCLUDED_)
|