MCPcopy Index your code
hub / github.com/processing/processing / sortImpl

Method sortImpl

core/src/processing/data/DoubleDict.java:712–773  ·  view source on GitHub ↗
(final boolean useKeys, final boolean reverse,
                          final boolean stable)

Source from the content-addressed store, hash-verified

710
711
712 protected void sortImpl(final boolean useKeys, final boolean reverse,
713 final boolean stable) {
714 Sort s = new Sort() {
715 @Override
716 public int size() {
717 if (useKeys) {
718 return count; // don't worry about NaN values
719
720 } else if (count == 0) { // skip the NaN check, it'll AIOOBE
721 return 0;
722
723 } else { // first move NaN values to the end of the list
724 int right = count - 1;
725 while (values[right] != values[right]) {
726 right--;
727 if (right == -1) {
728 return 0; // all values are NaN
729 }
730 }
731 for (int i = right; i >= 0; --i) {
732 if (Double.isNaN(values[i])) {
733 swap(i, right);
734 --right;
735 }
736 }
737 return right + 1;
738 }
739 }
740
741 @Override
742 public int compare(int a, int b) {
743 double diff = 0;
744 if (useKeys) {
745 diff = keys[a].compareToIgnoreCase(keys[b]);
746 if (diff == 0) {
747 diff = values[a] - values[b];
748 }
749 } else { // sort values
750 diff = values[a] - values[b];
751 if (diff == 0 && stable) {
752 diff = keys[a].compareToIgnoreCase(keys[b]);
753 }
754 }
755 if (diff == 0) {
756 return 0;
757 } else if (reverse) {
758 return diff < 0 ? 1 : -1;
759 } else {
760 return diff < 0 ? -1 : 1;
761 }
762 }
763
764 @Override
765 public void swap(int a, int b) {
766 DoubleDict.this.swap(a, b);
767 }
768 };
769 s.run();

Callers 4

sortKeysMethod · 0.95
sortKeysReverseMethod · 0.95
sortValuesMethod · 0.95
sortValuesReverseMethod · 0.95

Calls 2

runMethod · 0.95
resetIndicesMethod · 0.95

Tested by

no test coverage detected