SimpleObjectVec.java
01 package io.jenetics.ext.moea;
02 
03 import static java.util.Objects.requireNonNull;
04 
05 import java.util.Arrays;
06 import java.util.Comparator;
07 
08 final class SimpleObjectVec<T> implements Vec<T[]{
09     private final T[] _data;
10     private final Comparator<? super T> _comparator;
11     private final ElementDistance<T[]> _distance;
12 
13     SimpleObjectVec(
14         final T[] data,
15         final Comparator<? super T> comparator,
16         final ElementDistance<T[]> distance
17     ) {
18         Vecs.checkVecLength(data.length);
19         _data = data;
20         _comparator = requireNonNull(comparator);
21         _distance = requireNonNull(distance);
22     }
23 
24     @Override
25     public T[] data() {
26         return _data;
27     }
28 
29     @Override
30     public int length() {
31         return _data.length;
32     }
33 
34     @Override
35     public ElementComparator<T[]> comparator() {
36         return (u, v, i-> _comparator.compare(u[i], v[i]);
37     }
38 
39     @Override
40     public ElementDistance<T[]> distance() {
41         return _distance;
42     }
43 
44     @Override
45     public Comparator<T[]> dominance() {
46         return (u, v-> Vec.dominance(u, v, _comparator);
47     }
48 
49     @Override
50     public int hashCode() {
51         return Arrays.hashCode(_data);
52     }
53 
54     @Override
55     public boolean equals(final Object obj) {
56         return obj == this ||
57             obj instanceof SimpleObjectVec &&
58             Arrays.equals(((SimpleObjectVec)obj)._data, _data);
59     }
60 
61     @Override
62     public String toString() {
63         return Arrays.toString(_data);
64     }
65 
66 }