I was just curious.

In C++ both constants 0x80 and -0x80 are of type 'int' and have the same
lower byte, so they give the same result. Though first number is actually
0x00000080 when the second one is 0xFFFFFF80.

So it's just made a minus sign look a little redundant and pointless to me
in C++ code.

Best Regards,
Igor

On Mon, Feb 6, 2017 at 10:15 PM, Vyacheslav Daradur <daradu...@gmail.com>
wrote:

> Byte.MIN_VALUE = -128 = -0x80
> Byte.MAX_VALUE = 127 = 0x7F
>
> It is just more evident for me.
>
> Maybe, I just have the Java programming style.
>
> In Java:
> byte a = 100 | -0x80;  // compiled
> byte b = 100 | 0x80;  // doesn't compile, explicit type casting is
> neccessary (byte)(100 | 0x80)
> System.out.println(a | -0x80); // -28
> System.out.println(a | 0x80); // 228 - cast to int
>
> Is it bad style?
>
> 2017-02-06 20:04 GMT+03:00 Igor Sapego <isap...@gridgain.com>:
>
>> Vyacheslav,
>>
>> Overall looks good. But why do you use -0x80 instead of 0x80?
>>
>> Best Regards,
>> Igor
>>
>> On Mon, Feb 6, 2017 at 5:36 PM, Vyacheslav Daradur <daradu...@gmail.com>
>> wrote:
>>
>>> Igor,
>>>
>>> I didn't change the CPP code before approval approach.
>>> I shall write directly, sorry.
>>>
>>> But I made CPP changes already.
>>>
>>> > TestEscConvertFunctionFloat
>>> > TestEscConvertFunctionDouble.
>>> These tests were passed
>>> <http://ci.ignite.apache.org/viewQueued.html?itemId=445824>
>>>
>>>
>>>
>>> 2017-02-06 13:20 GMT+03:00 Pavel Tupitsyn <ptupit...@apache.org>:
>>>
>>>> .NET changes look good to me.
>>>>
>>>> Pavel
>>>>
>>>> On Mon, Feb 6, 2017 at 1:10 PM, Igor Sapego <isap...@gridgain.com>
>>>> wrote:
>>>>
>>>> > Vyacheslav, I can see two ODBC tests fail in C++ test suits that
>>>> should
>>>> > not:
>>>> > - TestEscConvertFunctionFloat
>>>> > <http://ci.ignite.apache.org/viewLog.html?buildId=444207&tab
>>>> =buildResultsDiv&buildTypeId=IgniteTests_IgnitePlatformCppLi
>>>> nux#testNameId-9178617718508801660>
>>>> > - TestEscConvertFunctionDouble
>>>> > <http://ci.ignite.apache.org/viewLog.html?buildId=444207&tab
>>>> =buildResultsDiv&buildTypeId=IgniteTests_IgnitePlatformCppLi
>>>> nux#testNameId5432107083822590090>
>>>> > .
>>>> >
>>>> > I believe, this is because I can't see any changes in C++ Decimal
>>>> > marshaling code.
>>>> > Please, pay attention to file ignite\modules\platforms\cpp\
>>>> > odbc\src\utility.cpp,
>>>> > functions ReadDecimal and WriteDecimal.
>>>> >
>>>> > Best Regards,
>>>> > Igor
>>>> >
>>>> > On Mon, Feb 6, 2017 at 11:21 AM, Vyacheslav Daradur <
>>>> daradu...@gmail.com>
>>>> > wrote:
>>>> >
>>>> >> Pavel, Igor
>>>> >>
>>>> >> Please, review it again.
>>>> >>
>>>> >> https://github.com/apache/ignite/pull/1473/files
>>>> >>
>>>> >> All tests
>>>> >> <http://ci.ignite.apache.org/viewLog.html?buildId=444231&tab
>>>> =buildResultsDiv&buildTypeId=IgniteTests_RunAll>
>>>> >> .NET tests
>>>> >> <http://ci.ignite.apache.org/viewLog.html?buildId=443439&tab
>>>> =buildResultsDiv&buildTypeId=IgniteTests_IgnitePlatformNet>
>>>> >>
>>>> >> How about this solution?
>>>> >>
>>>> >> 2017-02-03 13:59 GMT+03:00 Vyacheslav Daradur <daradu...@gmail.com>:
>>>> >>
>>>> >>> 1. On my first question
>>>> >>> I think up, if we serialize only positive numbers, we can write
>>>> sign in
>>>> >>> first byte, because it is positive always.
>>>> >>> I will try to make this decision
>>>> >>>
>>>> >>> 2017-02-03 12:48 GMT+03:00 Pavel Tupitsyn <ptupit...@apache.org>:
>>>> >>>
>>>> >>>> Vyacheslav,
>>>> >>>>
>>>> >>>> I see the problem now. Yes, negative scale is not supported in
>>>> .NET.
>>>> >>>>
>>>> >>>> I don't think we should do the multiplication. As you described,
>>>> this
>>>> >>>> will
>>>> >>>> break equality on Java side. SQL queries might be broken, etc.
>>>> >>>> I think we should throw an exception in .NET when encountering
>>>> negative
>>>> >>>> decimal scale.
>>>> >>>>
>>>> >>>> Vladimir O, any thoughts?
>>>> >>>>
>>>> >>>> Pavel
>>>> >>>>
>>>> >>>> On Fri, Feb 3, 2017 at 12:01 PM, Vyacheslav Daradur <
>>>> >>>> daradu...@gmail.com>
>>>> >>>> wrote:
>>>> >>>>
>>>> >>>> > Hello.
>>>> >>>> >
>>>> >>>> > I looked and understood the code of methods ReadDecimal and
>>>> >>>> WriteDecimal
>>>> >>>> > on .NET platform.
>>>> >>>> >
>>>> >>>> > 1. At the moment remaking of this methods for my
>>>> Java-decimal-fix is
>>>> >>>> very
>>>> >>>> > difficult, it needs to write new methods for
>>>> >>>> serialization/deserialization
>>>> >>>> > of negative decimals.
>>>> >>>> >
>>>> >>>> > I can make it, but there is simpler decision: to add additional
>>>> byte
>>>> >>>> for
>>>> >>>> > sign.
>>>> >>>> >
>>>> >>>> > I need advice: difficult solution (new methods .net) Versus :
>>>> simple
>>>> >>>> > solutions (additional byte)?
>>>> >>>> >
>>>> >>>> > *I don't know yet, what changes are necessary on ะก++ platform.
>>>> >>>> >
>>>> >>>> > 2. I see a problem with the negative scale on .NET platform.
>>>> >>>> >
>>>> >>>> > Now negative scale is forbidden.
>>>> >>>> >
>>>> >>>> > We can make:
>>>> >>>> > if (scale < 0) return Decimal.Multiply(new decimal(lo, mid, hi,
>>>> neg,
>>>> >>>> 0),
>>>> >>>> > new decimal(Math.Pow(10, -scale)));
>>>> >>>> >
>>>> >>>> > But there is the problem:
>>>> >>>> > * 1 Serialize in Java; number=123456789, scale=-4
>>>> >>>> > * 2 Deserialize in .NET; number=1234567890000, scale=0
>>>> >>>> > * 3 Serialize in .NET; number=1234567890000, scale=0
>>>> >>>> > * 4 Deserialize in Java; number=1234567890000, scale=0
>>>> >>>> >
>>>> >>>> > Logically: (1) 123456789 * 10^4 == (2)  1234567890000
>>>> >>>> >
>>>> >>>> > In Java (1) not equal (2), because scales are different.
>>>> >>>> >
>>>> >>>> > Any thougths?
>>>> >>>> >
>>>> >>>> > 2017-01-31 14:08 GMT+03:00 Pavel Tupitsyn <ptupit...@apache.org
>>>> >:
>>>> >>>> >
>>>> >>>> >> Vyacheslav,
>>>> >>>> >>
>>>> >>>> >> I'm not sure I understand the code you attached.
>>>> >>>> >>
>>>> >>>> >> If you know how to fix the .NET part, can you just do it in
>>>> your PR
>>>> >>>> and
>>>> >>>> >> run "Platform .NET" on TeamCity to verify?
>>>> >>>> >> http://ci.ignite.apache.org/viewType.html?buildTypeId=Ignite
>>>> >>>> >> Tests_IgnitePlatformNet
>>>> >>>> >>
>>>> >>>> >> Thanks,
>>>> >>>> >>
>>>> >>>> >> Pavel
>>>> >>>> >>
>>>> >>>> >> On Tue, Jan 31, 2017 at 1:35 PM, Vyacheslav Daradur <
>>>> >>>> daradu...@gmail.com>
>>>> >>>> >> wrote:
>>>> >>>> >>
>>>> >>>> >>> Pavel, I see that you are the main contributor of Ignite.NET.
>>>> >>>> >>>
>>>> >>>> >>> We should repair BinaryUtils#ReadDecimal and
>>>> >>>> BinaryUtils#WriteDecimal.
>>>> >>>> >>>
>>>> >>>> >>> *ReadDecimal:
>>>> >>>> >>> byte[] mag = ReadByteArray(stream); // including at least one
>>>> sign
>>>> >>>> bit,
>>>> >>>> >>> which is (ceil((this.bitLength() + 1)/8))
>>>> >>>> >>> bool neg = (mag[0] < 0);
>>>> >>>> >>> if (scale < 0)
>>>> >>>> >>> // TODO: a scale of -3 means the unscaled value is multiplied
>>>> by
>>>> >>>> 1000
>>>> >>>> >>>
>>>> >>>> >>> *WriteDecimal:
>>>> >>>> >>> int sign = vals[3] < 0 ? -1 : 0;
>>>> >>>> >>> stream.WriteInt(sign);
>>>> >>>> >>>
>>>> >>>> >>> Can you help with this task?
>>>> >>>> >>>
>>>> >>>> >>>
>>>> >>>> >>> 2017-01-31 12:46 GMT+03:00 Igor Sapego <isap...@gridgain.com>:
>>>> >>>> >>>
>>>> >>>> >>>> Vyacheslav,
>>>> >>>> >>>>
>>>> >>>> >>>> I had a look at your PR and left some comments in Jira.
>>>> >>>> >>>>
>>>> >>>> >>>> Best Regards,
>>>> >>>> >>>> Igor
>>>> >>>> >>>>
>>>> >>>> >>>> On Mon, Jan 30, 2017 at 12:52 PM, Vyacheslav Daradur <
>>>> >>>> >>>> daradu...@gmail.com>
>>>> >>>> >>>> wrote:
>>>> >>>> >>>>
>>>> >>>> >>>> > Hello. I fixed it. Please, review.
>>>> >>>> >>>> >
>>>> >>>> >>>> > https://issues.apache.org/jira/browse/IGNITE-3196 -
>>>> Marshaling
>>>> >>>> works
>>>> >>>> >>>> wrong
>>>> >>>> >>>> > for the BigDecimals that have negative scale
>>>> >>>> >>>> >
>>>> >>>> >>>>
>>>> >>>> >>>
>>>> >>>> >>>
>>>> >>>> >>
>>>> >>>> >
>>>> >>>>
>>>> >>>
>>>> >>>
>>>> >>
>>>> >
>>>>
>>>
>>>
>>
>

Reply via email to