KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > gnu > xquery > util > Reduce


1 // Copyright (c) 2002 Per M.A. Bothner.
2
// This is free software; for terms and warranty disclaimer see ./COPYING.
3

4 package gnu.xquery.util;
5 import gnu.mapping.*;
6 import gnu.lists.*;
7 import gnu.math.Numeric;
8 import gnu.math.IntNum;
9 import gnu.kawa.functions.AddOp;
10
11 public class Reduce
12 {
13   public static Object JavaDoc sum (Object JavaDoc arg)
14     throws Throwable JavaDoc
15   {
16     return sum(arg, IntNum.zero());
17   }
18
19   public static Object JavaDoc sum (Object JavaDoc arg, Object JavaDoc zero)
20     throws Throwable JavaDoc
21   {
22     if (arg instanceof Values)
23       {
24     TreeList tlist = (TreeList) arg;
25     int pos = 0;
26         Object JavaDoc next = tlist.getPosNext(pos);
27         if (next == Sequence.eofValue)
28           return zero;
29         Object JavaDoc result = MinMax.convert(next);
30     for (;;)
31       {
32             pos = tlist.nextPos(pos);
33         next = tlist.getPosNext(pos);
34         if (next == Sequence.eofValue)
35           return result;
36             next = MinMax.convert(next);
37         result = AddOp.apply2(1, result, next);
38       }
39       }
40     else
41       return (Number JavaDoc) MinMax.convert(arg);
42   }
43 }
44
Popular Tags