Skip to content

Commit

Permalink
bug fixed
Browse files Browse the repository at this point in the history
  • Loading branch information
Yegor Bugayenko committed Jan 31, 2014
1 parent 3544416 commit e22a197
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 7 deletions.
39 changes: 33 additions & 6 deletions src/main/java/com/jcabi/immutable/ArrayComparator.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@
package com.jcabi.immutable;

import com.jcabi.aspects.Immutable;
import java.io.Serializable;
import java.util.Comparator;

/**
* Comparator for arrays.
Expand All @@ -40,17 +42,26 @@
* @since 1.0
*/
@Immutable
public interface ArrayComparator<T> extends java.util.Comparator<T> {
@SuppressWarnings("unchecked")
public interface ArrayComparator<T> extends Comparator<T> {

/**
* Default comparator.
* @param <T> Type of argument
*/
@Immutable
final class Default<T> implements ArrayComparator<T> {
final class Default<T> implements ArrayComparator<T>, Serializable {
/**
* Serialization marker.
*/
private static final long serialVersionUID = 0x54ef44fb3ef2efa3L;
@Override
public String toString() {
return "DEFAULT";
}
@Override
public int compare(final T left, final T right) {
return Comparable.class.cast(left).compareTo(right);
return ((Comparable<T>) left).compareTo(right);
}
}

Expand All @@ -59,7 +70,15 @@ public int compare(final T left, final T right) {
* @param <T> Type of argument
*/
@Immutable
final class Neutral<T> implements ArrayComparator<T> {
final class Neutral<T> implements ArrayComparator<T>, Serializable {
/**
* Serialization marker.
*/
private static final long serialVersionUID = 0x54ef489b3ef2eca3L;
@Override
public String toString() {
return "NEUTRAL";
}
@Override
public int compare(final T left, final T right) {
return 1;
Expand All @@ -71,10 +90,18 @@ public int compare(final T left, final T right) {
* @param <T> Type of argument
*/
@Immutable
final class Reverse<T> implements ArrayComparator<T> {
final class Reverse<T> implements ArrayComparator<T>, Serializable {
/**
* Serialization marker.
*/
private static final long serialVersionUID = 0x545f489d3ed2eca3L;
@Override
public String toString() {
return "REVERSE";
}
@Override
public int compare(final T left, final T right) {
return Comparable.class.cast(right).compareTo(left);
return ((Comparable<T>) right).compareTo(left);
}
}

Expand Down
9 changes: 8 additions & 1 deletion src/main/java/com/jcabi/immutable/ArraySortedSet.java
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,14 @@ public ArraySortedSet(final Iterable<T> set,
}
this.cmp = comparator;
if (set instanceof ArraySortedSet) {
this.values = ((ArraySortedSet<T>) set).values;
final ArraySortedSet<T> origin = (ArraySortedSet<T>) set;
if (origin.cmp.equals(this.cmp)) {
this.values = origin.values;
} else {
final Set<T> hset = new TreeSet<T>(this.cmp);
hset.addAll(Collection.class.cast(set));
this.values = hset.toArray((T[]) new Object[hset.size()]);
}
} else if (set instanceof Collection) {
final Set<T> hset = new TreeSet<T>(this.cmp);
hset.addAll(Collection.class.cast(set));
Expand Down

0 comments on commit e22a197

Please sign in to comment.