I try this:
CGXDLMSVariant str1(std::string("hello"));
CGXDLMSVariant str2(std::string("hello"));
bool eq1=str1.Equals(str2); //returns false but these variables are equal
CGXDLMSVariant v1(99);
v1.ChangeType(DLMS_DATA_TYPE_UINT16);
CGXDLMSVariant v2(99);
v2.ChangeType(DLMS_DATA_TYPE_UINT16);
bool eq2=v1.Equals(str2); //returns false but these variables are equal
Is it OK? Which data type must be CGXDLMSVariant for correct work Equals() method?
I don't know why it succeeds for me every time. But it's changed for the next release to this:
if (vt == DLMS_DATA_TYPE_STRING)
{
return strVal == item.strVal;
}
int size = GetSize();
....
Hi Dmitry,
Hi Dmitry,
Equals-method is planned to work with integer numbers and it's not working with double, string, bit-string, or octet-string at the moment.
Change this and it will work with numbers. :-)
bool eq2 = v1.Equals(str2);
to
bool eq2 = v1.Equals(v2);
BR,
Mikko
Hi,
Hi,
Can you test this again?
CGXDLMSVariant str1(std::string("hello"));
CGXDLMSVariant str2(std::string("hello"));
bool eq1=str1.Equals(str2);
I did try it and Equals-method with string was working. eq1 was true.
BR,
Mikko
//Change this and it will
//Change this and it will work with numbers. :-)
//bool eq2 = v1.Equals(str2);
//to
//bool eq2 = v1.Equals(v2);
It's my fail! :)
I tested again
CGXDLMSVariant str1(std::string("hello"));
CGXDLMSVariant str2(std::string("hello"));
bool eq1=str1.Equals(str2);
eq1 was false.
If i add to Equals() this:
if (size != 0)
{
switch(vt)
{
case DLMS_DATA_TYPE::DLMS_DATA_TYPE_STRING:
{
return strVal == item.strVal;
}
//add other types
default:;
}
return memcmp(&this->bVal, &item.bVal, size) == 0;
}
Now eq1 == true
Hi,
Hi,
I don't know why it succeeds for me every time. But it's changed for the next release to this:
if (vt == DLMS_DATA_TYPE_STRING)
{
return strVal == item.strVal;
}
int size = GetSize();
....
BR,
Mikko