// Path: src/main/java/com/officedrop/redis/failover/HostConfiguration.java
// public class HostConfiguration {
// 
//     private final String host;
//     private final int port;
//     private final int timeout;
//     private final int database;
// 
//     public HostConfiguration(String host, int port) {
//         this( host, port, Protocol.DEFAULT_TIMEOUT, Protocol.DEFAULT_DATABASE );
//     }
// 
//     public HostConfiguration(String host, int port, int timeout) {
//         this( host, port, timeout, Protocol.DEFAULT_DATABASE );
//     }
// 
//     public HostConfiguration(String host, int port, int timeout, int database) {
// 
//         if ( host == null || host.trim().isEmpty() ) {
//             throw new IllegalArgumentException("'host' can not be null");
//         }
// 
//         this.port = port;
//         this.timeout = timeout;
//         this.host = host;
//         this.database = database;
//     }
// 
//     public int getPort() {
//         return port;
//     }
// 
//     public String getHost() {
//         return host;
//     }
// 
//     public int getTimeout() {
//         return this.timeout;
//     }
// 
//     public int getDatabase() {
//         return this.database;
//     }
// 
//     public String asHost() {
//         return String.format("%s:%s", this.getHost(), this.getPort());
//     }
// 
// 
//     @Override
//     public boolean equals(final Object o) {
//         if (this == o) return true;
//         if (!(o instanceof HostConfiguration)) return false;
// 
//         HostConfiguration that = (HostConfiguration) o;
// 
//         if (port != that.port) return false;
//         if (database != that.database) return false;
//         if (!host.equals(that.host)) return false;
// 
//         return true;
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = host.hashCode();
//         result = 31 * result + port;
//         return result;
//     }
// 
//     @Override
//     public String toString() {
//         return "HostConfiguration{" +
//                 "host='" + host + '\'' +
//                 ", port=" + port +
//                 ", timeout=" + timeout +
//                 '}';
//     }
// 
// }


import com.officedrop.redis.failover.HostConfiguration;
import java.util.ArrayList;
import java.util.List;
package com.officedrop.redis.failover.strategy;



/**
* User: Maurício Linhares
* Date: 1/5/13
* Time: 5:33 PM
*/
class HostLatency implements Comparable<HostLatency> {

    private final HostConfiguration host;
// Path: src/main/java/com/officedrop/redis/failover/HostConfiguration.java
// public class HostConfiguration {
// 
//     private final String host;
//     private final int port;
//     private final int timeout;
//     private final int database;
// 
//     public HostConfiguration(String host, int port) {
//         this( host, port, Protocol.DEFAULT_TIMEOUT, Protocol.DEFAULT_DATABASE );
//     }
// 
//     public HostConfiguration(String host, int port, int timeout) {
//         this( host, port, timeout, Protocol.DEFAULT_DATABASE );
//     }
// 
//     public HostConfiguration(String host, int port, int timeout, int database) {
// 
//         if ( host == null || host.trim().isEmpty() ) {
//             throw new IllegalArgumentException("'host' can not be null");
//         }
// 
//         this.port = port;
//         this.timeout = timeout;
//         this.host = host;
//         this.database = database;
//     }
// 
//     public int getPort() {
//         return port;
//     }
// 
//     public String getHost() {
//         return host;
//     }
// 
//     public int getTimeout() {
//         return this.timeout;
//     }
// 
//     public int getDatabase() {
//         return this.database;
//     }
// 
//     public String asHost() {
//         return String.format("%s:%s", this.getHost(), this.getPort());
//     }
// 
// 
//     @Override
//     public boolean equals(final Object o) {
//         if (this == o) return true;
//         if (!(o instanceof HostConfiguration)) return false;
// 
//         HostConfiguration that = (HostConfiguration) o;
// 
//         if (port != that.port) return false;
//         if (database != that.database) return false;
//         if (!host.equals(that.host)) return false;
// 
//         return true;
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = host.hashCode();
//         result = 31 * result + port;
//         return result;
//     }
// 
//     @Override
//     public String toString() {
//         return "HostConfiguration{" +
//                 "host='" + host + '\'' +
//                 ", port=" + port +
//                 ", timeout=" + timeout +
//                 '}';
//     }
// 
// }


// Path: src/main/java/com/officedrop/redis/failover/strategy/HostLatency.java
import com.officedrop.redis.failover.HostConfiguration;
import java.util.ArrayList;
import java.util.List;

package com.officedrop.redis.failover.strategy;



/**
* User: Maurício Linhares
* Date: 1/5/13
* Time: 5:33 PM
*/
class HostLatency implements Comparable<HostLatency> {

    private final HostConfiguration host;
    private final List<Long> measuredLatencies = new ArrayList<Long>();