Synchronize mql-zmq changes on Lang/Native; add MqlTick and MqlRates support for ZmqMsg

This commit is contained in:
Ding Li
2018-02-12 09:33:43 +08:00
parent df54353865
commit 4468c27d30
2 changed files with 30 additions and 25 deletions
+4 -10
View File
@@ -143,16 +143,10 @@ string StringFromUtf8Pointer(intptr_t psz,int len)
if(len < 0) return NULL;
string res;
int required=MultiByteToWideChar(CP_UTF8,0,psz,len,res,0);
StringInit(res,required);
int resLength = MultiByteToWideChar(CP_UTF8,0,psz,len,res,required);
if(resLength != required)
{
return NULL;
}
else
{
return res;
}
// need to include the NULL terminating character
StringInit(res,required+1);
int rlen=MultiByteToWideChar(CP_UTF8,0,psz,len,res,required);
return rlen != required ? NULL : res;
}
//+------------------------------------------------------------------+
//| for null-terminated string |
+26 -15
View File
@@ -46,10 +46,10 @@ int zmq_msg_close(zmq_msg_t &msg);
int zmq_msg_move(zmq_msg_t &dest,zmq_msg_t &src);
int zmq_msg_copy(zmq_msg_t &dest,zmq_msg_t &src);
// char *
intptr_t zmq_msg_data(zmq_msg_t const &msg);
int zmq_msg_size(zmq_msg_t const &msg);
int zmq_msg_more(zmq_msg_t const &msg);
int zmq_msg_get(zmq_msg_t const &msg,int property);
intptr_t zmq_msg_data(zmq_msg_t &msg);
int zmq_msg_size(zmq_msg_t &msg);
int zmq_msg_more(zmq_msg_t &msg);
int zmq_msg_get(zmq_msg_t &msg,int property);
int zmq_msg_set(zmq_msg_t &msg,int property,int optval);
// const char *
intptr_t zmq_msg_gets(zmq_msg_t &msg,const char &property[]);
@@ -62,7 +62,7 @@ struct ZmqMsg: public zmq_msg_t
protected:
int get(int property) {return zmq_msg_get(this,property);}
bool set(int property,int value) {return 0==zmq_msg_set(this,property,value);}
intptr_t data() const {return zmq_msg_data(this);}
intptr_t data() {return zmq_msg_data(this);}
bool setStringData(string data,bool nullterminated=false);
public:
ZmqMsg() {zmq_msg_init(this);}
@@ -88,17 +88,9 @@ public:
size_t size() {return zmq_msg_size(this);}
void getData(uchar &data[]);
string getData();
template<typename T>
void getData(T &array[]) const {ArrayFromPointer(array,data());}
template<typename T>
void setData(const T &array[]) {ArrayToPointer(array,data());}
template<typename T>
void getData(T &value) const {ValueFromPointer(value,data());}
template<typename T>
void setData(const T &value) {ValueToPointer(value,data());}
void setData(const uchar &data[]);
bool more() {return 1==zmq_msg_more(this);}
@@ -119,6 +111,16 @@ 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)<size) ArrayResize(data,(int)size);
ArrayFromPointer(data,src);
}
//+------------------------------------------------------------------+
//| Get message data as utf-8 string |
//+------------------------------------------------------------------+
string ZmqMsg::getData()
@@ -128,6 +130,15 @@ string ZmqMsg::getData()
return StringFromUtf8Pointer(psz,(int)size);
}
//+------------------------------------------------------------------+
//| copy data to message internal storage |
//+------------------------------------------------------------------+
void ZmqMsg::setData(const uchar &data[])
{
intptr_t dest=data();
size_t size=size();
ArrayToPointer(data,dest,(int)size);
}
//+------------------------------------------------------------------+
//| Wraps zmq_msg_gets: get metadata associated with the msg |
//+------------------------------------------------------------------+
string ZmqMsg::meta(const string property)