    001    package com.hammurapi.eventbus;
    002
    003    import java.io.Serializable;
    004    import java.util.Arrays;
    005
    006    /**
    007     * Mapper maps events from one array to another.
    008     * @author Pavel Vlasov
    009     *
    010     */
    011    public class Mapper<E> implements Serializable {
    012
    013            private int[] indexMap;
    014
    015            /**
    016             * @param indexMap Array elements contain target indices.
    017             */
    018            public Mapper(int[] indexMap) {
    019                    this.indexMap = indexMap;
    020            }
    021
    022            boolean mapsTo(int idx) {
    023                    for (int i=0; i<indexMap.length; ++i) {
    024                            if (idx==indexMap[i]) {
    025                                    return true;
    026                            }
    027                    }
    028                    return false;
    029            }
    030
    031            public int[] getIndexMap() {
    032                    return indexMap;
    033            }
    034
    035            /**
    036             * Maps events from input to output.
    037             * @param input
    038             * @param output
    039             */
    040            void map(E[] input, E[] output) {
    041                    if (input!=null) {
    042                            for (int i=0; i<input.length; ++i) {
    043                                    if (output.length>indexMap[i]) {
    044                                            output[indexMap[i]] = input[i];
    045                                    }
    046                            }
    047                    }
    048            }
    049
    050            @Override
    051            public int hashCode() {
    052                    final int prime = 31;
    053                    int result = 1;
    054                    result = prime * result + Arrays.hashCode(indexMap);
    055                    return result;
    056            }
    057
    058            @Override
    059            public boolean equals(Object obj) {
    060                    if (this == obj)
    061                            return true;
    062                    if (obj == null)
    063                            return false;
    064                    if (getClass() != obj.getClass())
    065                            return false;
    066                    Mapper other = (Mapper) obj;
    067                    if (!Arrays.equals(indexMap, other.indexMap))
    068                            return false;
    069                    return true;
    070            }
    071
    072            @Override
    073            public String toString() {
    074                    return "Mapper [indexMap=" + Arrays.toString(indexMap) + "]";
    075            }
    076
    077    }