incubator-vxquery-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Vinayak Borkar <vbo...@yahoo.com>
Subject Re: Arithmetic Functions
Date Mon, 18 Jun 2012 02:48:53 GMT
Where is the patch? Did you forget to attache it to the mail?

Thanks,
Vinayak


On 6/17/12 6:10 PM, Eldon Carman wrote:
> I went through add, subtract, divide and multiply. Here is a patch of
> my changes. I skipped the date functions, since we have not talked
> about the date format and the Pointable classes are just stubbed out.
> The XSDecimalPointable has been updated off a copy of DoublePointable
> and just renamed. Not sure if this is correct, but now all the
> Integer, Float and Double all used the same functions when doing the
> operations.
>
> When you have time I would like your feedback.
>
> Thanks
> Preston
>
> On Fri, Jun 15, 2012 at 5:24 PM, Till Westmann <till@westmann.org> wrote:
>>
>> On Jun 15, 2012, at 5:06 PM, Eldon Carman wrote:
>>
>>> Ok. Now for these mixed types that are added together, there is a
>>> promotion order. Basically the largest numeric type gets used. I have
>>> been trying to find documentation on the promotion order. Is that what
>>> I listed before? (size order)
>>>
>>>   1. double (double-precision 64-bit floating point type) - Java type double
>>>   2. float (single-precision 32-bit floating point type) - Java type float
>>>   3. decimal (a minimum of 18 decimal digits) - Java type double ???
>>>   4. integer (a decimal type with a fixed decimal point) - Java type long
>>>
>>> Also do you know where that is in the xquery specification?
>>
>> Here it is:
>> http://www.w3.org/TR/xquery/#id-type-promotion-and-operator-mapping
>>
>>> On Fri, Jun 15, 2012 at 4:39 PM, Vinayak Borkar <vborky@yahoo.com> wrote:
>>>> Lexicographical order is text sort order. So:
>>>>
>>>> decimal
>>>> double
>>>> float
>>>> integer
>>>>
>>>> xs:integer is supposed to be infinite precision, but we represent it as a
64
>>>> bit fixed-precision signed-integer which is a long in java.
>>>>
>>>> Vinayak
>>>>
>>>>
>>>>
>>>> On 6/15/12 3:11 PM, Eldon Carman wrote:
>>>>>
>>>>> Thanks for the scaffolding. I have two questions. Is this the correct
>>>>> lexicographical order?
>>>>>   1. double
>>>>>   2. float
>>>>>   3. decimal
>>>>>   4. integer
>>>>>
>>>>> Also do we always referrer to a integer as a long for this implementation?
>>>>>
>>>>> Preston
>>>>>
>>>>> On Fri, Jun 15, 2012 at 7:09 AM, Vinayak Borkar<vborky@yahoo.com>
 wrote:
>>>>>>
>>>>>> Preston,
>>>>>>
>>>>>>
>>>>>> I have now added some scaffolding so that implementing the arithmetic
>>>>>> functions will be easier.
>>>>>>
>>>>>> I have also added the code for xs:integer + xs:integer which is needed
>>>>>> for
>>>>>> the 1 + 1 example, ant it works end-to-end.
>>>>>>
>>>>>> Look at the AddScalarEvaluatorFactory class. You will be creating
a class
>>>>>> like that for each of Subtract, Multiply, and Divide by extending
>>>>>> AbstractArithmeticScalarEvaluatorFactory.
>>>>>>
>>>>>> The only method that you have to implement when you extend
>>>>>> AbstractArithmeticScalarEvaluatorFactory is the
>>>>>> createArithmeticOperation()
>>>>>> method that creates an instance of AbstractArithmeticOperation.
>>>>>>
>>>>>> For example, the one for Add looks like this:
>>>>>>
>>>>>>     @Override
>>>>>>     protected AbstractArithmeticOperation createArithmeticOperation()
{
>>>>>>         return new AddOperation();
>>>>>>     }
>>>>>>
>>>>>>
>>>>>> The AddOperation implements all the logic for what it means to add
two
>>>>>> values of various types.
>>>>>>
>>>>>> The AbstractArithmeticScalarEvaluatorFactory has all the logic to
>>>>>> correctly
>>>>>> dispatch to the correct method in AbstractArithmeticOperation based
on
>>>>>> XQuery rules.
>>>>>>
>>>>>> As your next step, please implement all the methods in AddOperation.
The
>>>>>> methods in this class look like
>>>>>>
>>>>>> void operateXY(X x, Y y, DataOutput dOut)
>>>>>>
>>>>>> where X and Y are type names.
>>>>>>
>>>>>> For example the method that computes the result for xs:integer and
>>>>>> xs:double
>>>>>> would read:
>>>>>>
>>>>>> void operateIntegerDouble(LongPointable longp, DoublePointable doublep,
>>>>>> DataOutput dOut)
>>>>>>
>>>>>> Since Add is commutative, you can implement about half of the methods
by
>>>>>> delegating to the other half (by switching the arguments). The convention
>>>>>> you should follow is have operateXY delegate to operateYX when X
is
>>>>>> lexicographically greater than Y.
>>>>>>
>>>>>> So in the above example, operateIntegerDouble will delegate to
>>>>>> operateDoubleInteger in the AddOperation class.
>>>>>>
>>>>>> Note that this trick does not apply to Minus and Divide, but applied
to
>>>>>> Multiply.
>>>>>>
>>>>>> Let us know how it goes with implementing the unimplemented methods
in
>>>>>> AddOperation and then implemnting the other arithmetic operation
classes.
>>>>>>
>>>>>> Vinayak
>>>>>
>>>>>
>>>>
>>



Mime
View raw message