home *** CD-ROM | disk | FTP | other *** search
- package COM.objectspace.jgl;
-
- public final class Rotating {
- private Rotating() {
- }
-
- public static void rotate(ForwardIterator var0, ForwardIterator var1, ForwardIterator var2) {
- if (!(var0.getContainer() instanceof Sequence)) {
- throw new IllegalArgumentException("iterator containers must be a Sequence");
- } else if (!var0.equals(var1) && !var1.equals(var2)) {
- if (var0 instanceof RandomAccessIterator) {
- rotateRandomAccess((RandomAccessIterator)var0, (RandomAccessIterator)var1, (RandomAccessIterator)var2);
- } else if (var0 instanceof BidirectionalIterator) {
- BidirectionalIterator var3 = (BidirectionalIterator)var0;
- BidirectionalIterator var4 = (BidirectionalIterator)var1;
- BidirectionalIterator var5 = (BidirectionalIterator)var2;
- Reversing.reverse(var3, var4);
- Reversing.reverse(var4, var5);
- Reversing.reverse(var3, var5);
- } else {
- rotateForward(var0, var1, var2);
- }
- }
- }
-
- public static OutputIterator rotateCopy(ForwardIterator var0, ForwardIterator var1, ForwardIterator var2, OutputIterator var3) {
- return Copying.copy(var0, var1, Copying.copy(var1, var2, var3));
- }
-
- static void rotateBidirectional(BidirectionalIterator var0, BidirectionalIterator var1, BidirectionalIterator var2) {
- Reversing.reverse(var0, var1);
- Reversing.reverse(var1, var2);
- Reversing.reverse(var0, var2);
- }
-
- static void rotateForward(ForwardIterator var0, ForwardIterator var1, ForwardIterator var2) {
- ForwardIterator var3 = (ForwardIterator)var0.clone();
- ForwardIterator var4 = (ForwardIterator)var1.clone();
- ForwardIterator var5 = (ForwardIterator)var1.clone();
-
- while(true) {
- Swapping.iterSwap(var3, var5);
- var3.advance();
- var5.advance();
- if (var3.equals(var4)) {
- if (var5.equals(var2)) {
- return;
- }
-
- var4 = (ForwardIterator)var5.clone();
- } else if (var5.equals(var2)) {
- var5 = (ForwardIterator)var4.clone();
- }
- }
- }
-
- static void rotateRandomAccess(RandomAccessIterator var0, RandomAccessIterator var1, RandomAccessIterator var2) {
- int var3 = gcd(var0.distance(var2), var0.distance(var1));
-
- while(var3-- != 0) {
- RandomAccessIterator var4 = (RandomAccessIterator)var0.clone();
- var4.advance(var3);
- cycle(var0, var2, var4, var0.distance(var1));
- }
-
- }
-
- static int gcd(int var0, int var1) {
- while(var1 != 0) {
- int var2 = var0 % var1;
- var0 = var1;
- var1 = var2;
- }
-
- return var0;
- }
-
- static void cycle(RandomAccessIterator var0, RandomAccessIterator var1, RandomAccessIterator var2, int var3) {
- Object var4 = var2.get();
- RandomAccessIterator var5 = (RandomAccessIterator)var2.clone();
- RandomAccessIterator var6 = (RandomAccessIterator)var5.clone();
- var6.advance(var3);
-
- while(!var6.equals(var2)) {
- var5.put(var6.get());
- var5 = (RandomAccessIterator)var6.clone();
- if (var6.distance(var1) > var3) {
- var6.advance(var3);
- } else {
- int var7 = var3 - var6.distance(var1);
- var6 = (RandomAccessIterator)var0.clone();
- var6.advance(var7);
- }
- }
-
- var5.put(var4);
- }
- }
-