blob: 8ec2504ba53cdb7bd01c57b71454b12e9e5523e8 [file] [log] [blame]
package org.eclipse.cdt.internal.core.util;
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* Rational Software - Initial API and implementation
***********************************************************************/
/**
* The SortOperation takes a collection of objects and returns
* a sorted collection of these objects. The sorting of these
* objects is based on their toString(). They are sorted in
* alphabetical order.
*
* This class is similar to the JDT toStringSorter class.
*/
public class ToStringSorter {
Object[] sortedObjects;
String[] sortedStrings;
/**
* Returns true if stringTwo is 'greater than' stringOne
* This is the 'ordering' method of the sort operation.
*/
public boolean compare(String stringOne, String stringTwo) {
return stringOne.compareTo(stringTwo) < 0;
}
/**
* Sort the objects in sorted collection and return that collection.
*/
private void quickSort(int left, int right) {
int originalLeft = left;
int originalRight = right;
int midIndex = (left + right) / 2;
String midToString = this.sortedStrings[midIndex];
do {
while (compare(this.sortedStrings[left], midToString))
left++;
while (compare(midToString, this.sortedStrings[right]))
right--;
if (left <= right) {
Object tmp = this.sortedObjects[left];
this.sortedObjects[left] = this.sortedObjects[right];
this.sortedObjects[right] = tmp;
String tmpToString = this.sortedStrings[left];
this.sortedStrings[left] = this.sortedStrings[right];
this.sortedStrings[right] = tmpToString;
left++;
right--;
}
} while (left <= right);
if (originalLeft < right)
quickSort(originalLeft, right);
if (left < originalRight)
quickSort(left, originalRight);
}
/**
* Return a new sorted collection from this unsorted collection.
* Sort using quick sort.
*/
public void sort(Object[] unSortedObjects, String[] unsortedStrings) {
int size = unSortedObjects.length;
this.sortedObjects = new Object[size];
this.sortedStrings = new String[size];
//copy the array so can return a new sorted collection
System.arraycopy(unSortedObjects, 0, this.sortedObjects, 0, size);
System.arraycopy(unsortedStrings, 0, this.sortedStrings, 0, size);
if (size > 1)
quickSort(0, size - 1);
}
}