From 66602232d61b4b54f489432c486fa7e08b5d6127 Mon Sep 17 00:00:00 2001 From: Ding Li Date: Tue, 26 Dec 2017 16:08:23 +0800 Subject: [PATCH] Updated dependency mql4-lib; improved ZmqMsg setData method --- Include/Mql/Lang/Error.mqh | Bin 0 -> 46652 bytes Include/Mql/Lang/GlobalVariable.mqh | 2 +- Include/Mql/Lang/Mql.mqh | 77 ++++++++++++++++++++++------ Include/Mql/Lang/Native.mqh | 34 ++++++++++-- Include/Zmq/ZmqMsg.mqh | 31 ++++------- 5 files changed, 101 insertions(+), 43 deletions(-) create mode 100644 Include/Mql/Lang/Error.mqh diff --git a/Include/Mql/Lang/Error.mqh b/Include/Mql/Lang/Error.mqh new file mode 100644 index 0000000000000000000000000000000000000000..69c446c3dc999910fab287fa4529aa49c0a9f4b7 GIT binary patch literal 46652 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 + StringSetCharacter(hex,i,digits[digit]); + shift-=4; + } + return(hex); + } + //--- Prefer Canvas/Canvas.mqh XRGB + static int rgb(int r,int g,int b) {return int(0xFF000000|(uchar(r)<<16)|(uchar(g)<<8)|uchar(b));} - static bool isEqual(double a,double b) {return CompareDoubles(a,b);} + //--- Prefer Lang/Number.mqh Double::IsEqual + static bool isEqual(double a,double b) {return NormalizeDouble(a-b,8)==0;} static bool isStopped() {return IsStopped();} @@ -67,7 +76,19 @@ public: static string getProgramName() {return MQLInfoString(MQL_PROGRAM_NAME);} static string getProgramPath() {return MQLInfoString(MQL_PROGRAM_PATH);} }; - +//+------------------------------------------------------------------+ +//| Object getter/setter generator | +//| ObjectAttr generates: | +//| 1. private member m_property | +//| 2. public method setProperty | +//| 3. public method getProperty | +//| ObjectAttrBool is specific to boolean type properties: | +//| 1. private member m_isProperty | +//| 2. public method setProperty | +//| 3. public method isProperty | +//| Use *Read or *Write versions for read only or write only | +//| properties | +//+------------------------------------------------------------------+ #define ObjectAttr(Type, Private, Public) \ public:\ Type get##Public() const {return m_##Private;}\ @@ -87,13 +108,35 @@ public:\ private:\ Type m_##Private\ +#define ObjectAttrBool(Public) \ +public:\ + bool is##Public() const {return m_is##Public;}\ + void set##Public(bool value) {m_is##Public=value;}\ +private:\ + bool m_is##Public\ + +#define ObjectAttrBoolRead(Public) \ +public:\ + bool is##Public() const {return m_is##Public;}\ +private:\ + bool m_is##Public\ + +#define ObjectAttrBoolWrite(Public) \ +public:\ + void set##Public(bool value) {m_is##Public=value;}\ +private:\ + bool m_##Private\ +//+------------------------------------------------------------------+ +//| Print debug messages: only generate code for debugging runs | +//+------------------------------------------------------------------+ #ifdef _DEBUG -#define Debug(msg) Print(">>> DEBUG: In ",__FUNCTION__,"(",__FILE__,":",__LINE__,") [", msg, "]") +#define Debug(msg) PrintFormat(">>> DEBUG[%s,%d,%s]: %s",__FILE__,__LINE__,__FUNCTION__,msg); #else #define Debug(msg) #endif - -//--- Execute some code in the global scope +//+------------------------------------------------------------------+ +//| Execute some code in the global scope | +//+------------------------------------------------------------------+ #define BEGIN_EXECUTE(Name) class __Execute##Name\ {\ public:__Execute##Name()\ diff --git a/Include/Mql/Lang/Native.mqh b/Include/Mql/Lang/Native.mqh index 9ee2d37..f4b6ccd 100644 --- a/Include/Mql/Lang/Native.mqh +++ b/Include/Mql/Lang/Native.mqh @@ -48,6 +48,10 @@ #import "kernel32.dll" void RtlMoveMemory(intptr_t dest,const uchar &array[],size_t length); void RtlMoveMemory(uchar &array[],intptr_t src,size_t length); +void RtlMoveMemory(intptr_t dest,const MqlRates &array[],size_t length); +void RtlMoveMemory(MqlRates &array[],intptr_t src,size_t length); +void RtlMoveMemory(intptr_t dest,const MqlTick &value,size_t length); +void RtlMoveMemory(MqlTick &value,intptr_t src,size_t length); void RtlMoveMemory(intptr_t &dest,intptr_t src,size_t length); int lstrlen(intptr_t psz); int lstrlenW(intptr_t psz); @@ -65,19 +69,41 @@ int MultiByteToWideChar(uint codePage, //+------------------------------------------------------------------+ //| Copy the memory contents pointed by src to array | //| array parameter should be initialized to the desired size | +//| Need to import RtlMoveMemory with appropriate parameter type T | //+------------------------------------------------------------------+ -void ArrayFromPointer(uchar &array[],intptr_t src,int count=WHOLE_ARRAY) +template +void ArrayFromPointer(T &array[],intptr_t src,int count=WHOLE_ARRAY) { int size=(count==WHOLE_ARRAY)?ArraySize(array):count; - RtlMoveMemory(array,src,(size_t)size); + RtlMoveMemory(array,src,(size_t)(size*sizeof(T))); } //+------------------------------------------------------------------+ //| Copy array to the memory pointed by dest | +//| Need to import RtlMoveMemory with appropriate parameter type T | //+------------------------------------------------------------------+ -void ArrayToPointer(const uchar &array[],intptr_t dest,int count=WHOLE_ARRAY) +template +void ArrayToPointer(const T &array[],intptr_t dest,int count=WHOLE_ARRAY) { int size=(count==WHOLE_ARRAY)?ArraySize(array):count; - RtlMoveMemory(dest,array,(size_t)size); + RtlMoveMemory(dest,array,(size_t)(size*sizeof(T))); + } +//+------------------------------------------------------------------+ +//| Copy the memory contents pointed by src to value type T | +//| Need to import RtlMoveMemory with appropriate parameter type T | +//+------------------------------------------------------------------+ +template +void ValueFromPointer(T &value,intptr_t src) + { + RtlMoveMemory(value,src,(size_t)sizeof(T)); + } +//+------------------------------------------------------------------+ +//| Copy value to the memory pointed by dest | +//| Need to import RtlMoveMemory with appropriate parameter type T | +//+------------------------------------------------------------------+ +template +void ValueToPointer(const T &value,intptr_t dest) + { + RtlMoveMemory(dest,value,(size_t)sizeof(T)); } //+------------------------------------------------------------------+ //| For void** type, dereference a level to void* | diff --git a/Include/Zmq/ZmqMsg.mqh b/Include/Zmq/ZmqMsg.mqh index f17e107..88d2032 100644 --- a/Include/Zmq/ZmqMsg.mqh +++ b/Include/Zmq/ZmqMsg.mqh @@ -88,9 +88,17 @@ public: size_t size() {return zmq_msg_size(this);} - void getData(uchar &data[]); string getData(); - void setData(const uchar &data[]); + + template + void getData(T &array[]) const {ArrayFromPointer(array,data());} + template + void setData(const T &array[]) {ArrayToPointer(array,data());} + + template + void getData(T &value) const {ValueFromPointer(value,data());} + template + void setData(const T &value) {ValueToPointer(value,data());} bool more() {return 1==zmq_msg_more(this);} @@ -111,16 +119,6 @@ bool ZmqMsg::setStringData(string data,bool nullterminated) return res; } //+------------------------------------------------------------------+ -//| Get message data as bytes array | -//+------------------------------------------------------------------+ -void ZmqMsg::getData(uchar &data[]) - { - size_t size=size(); - intptr_t src=data(); - if(ArraySize(data)