home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / Extras / OSpace / jgl.exe / jgl_2_0 / COM / objectspace / jgl / Rotating.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-03-12  |  2.8 KB  |  99 lines

  1. package COM.objectspace.jgl;
  2.  
  3. public final class Rotating {
  4.    private Rotating() {
  5.    }
  6.  
  7.    public static void rotate(ForwardIterator var0, ForwardIterator var1, ForwardIterator var2) {
  8.       if (!(var0.getContainer() instanceof Sequence)) {
  9.          throw new IllegalArgumentException("iterator containers must be a Sequence");
  10.       } else if (!var0.equals(var1) && !var1.equals(var2)) {
  11.          if (var0 instanceof RandomAccessIterator) {
  12.             rotateRandomAccess((RandomAccessIterator)var0, (RandomAccessIterator)var1, (RandomAccessIterator)var2);
  13.          } else if (var0 instanceof BidirectionalIterator) {
  14.             BidirectionalIterator var3 = (BidirectionalIterator)var0;
  15.             BidirectionalIterator var4 = (BidirectionalIterator)var1;
  16.             BidirectionalIterator var5 = (BidirectionalIterator)var2;
  17.             Reversing.reverse(var3, var4);
  18.             Reversing.reverse(var4, var5);
  19.             Reversing.reverse(var3, var5);
  20.          } else {
  21.             rotateForward(var0, var1, var2);
  22.          }
  23.       }
  24.    }
  25.  
  26.    public static OutputIterator rotateCopy(ForwardIterator var0, ForwardIterator var1, ForwardIterator var2, OutputIterator var3) {
  27.       return Copying.copy(var0, var1, Copying.copy(var1, var2, var3));
  28.    }
  29.  
  30.    static void rotateBidirectional(BidirectionalIterator var0, BidirectionalIterator var1, BidirectionalIterator var2) {
  31.       Reversing.reverse(var0, var1);
  32.       Reversing.reverse(var1, var2);
  33.       Reversing.reverse(var0, var2);
  34.    }
  35.  
  36.    static void rotateForward(ForwardIterator var0, ForwardIterator var1, ForwardIterator var2) {
  37.       ForwardIterator var3 = (ForwardIterator)var0.clone();
  38.       ForwardIterator var4 = (ForwardIterator)var1.clone();
  39.       ForwardIterator var5 = (ForwardIterator)var1.clone();
  40.  
  41.       while(true) {
  42.          Swapping.iterSwap(var3, var5);
  43.          var3.advance();
  44.          var5.advance();
  45.          if (var3.equals(var4)) {
  46.             if (var5.equals(var2)) {
  47.                return;
  48.             }
  49.  
  50.             var4 = (ForwardIterator)var5.clone();
  51.          } else if (var5.equals(var2)) {
  52.             var5 = (ForwardIterator)var4.clone();
  53.          }
  54.       }
  55.    }
  56.  
  57.    static void rotateRandomAccess(RandomAccessIterator var0, RandomAccessIterator var1, RandomAccessIterator var2) {
  58.       int var3 = gcd(var0.distance(var2), var0.distance(var1));
  59.  
  60.       while(var3-- != 0) {
  61.          RandomAccessIterator var4 = (RandomAccessIterator)var0.clone();
  62.          var4.advance(var3);
  63.          cycle(var0, var2, var4, var0.distance(var1));
  64.       }
  65.  
  66.    }
  67.  
  68.    static int gcd(int var0, int var1) {
  69.       while(var1 != 0) {
  70.          int var2 = var0 % var1;
  71.          var0 = var1;
  72.          var1 = var2;
  73.       }
  74.  
  75.       return var0;
  76.    }
  77.  
  78.    static void cycle(RandomAccessIterator var0, RandomAccessIterator var1, RandomAccessIterator var2, int var3) {
  79.       Object var4 = var2.get();
  80.       RandomAccessIterator var5 = (RandomAccessIterator)var2.clone();
  81.       RandomAccessIterator var6 = (RandomAccessIterator)var5.clone();
  82.       var6.advance(var3);
  83.  
  84.       while(!var6.equals(var2)) {
  85.          var5.put(var6.get());
  86.          var5 = (RandomAccessIterator)var6.clone();
  87.          if (var6.distance(var1) > var3) {
  88.             var6.advance(var3);
  89.          } else {
  90.             int var7 = var3 - var6.distance(var1);
  91.             var6 = (RandomAccessIterator)var0.clone();
  92.             var6.advance(var7);
  93.          }
  94.       }
  95.  
  96.       var5.put(var4);
  97.    }
  98. }
  99.