package netflix.ocelli.loadbalancer.weighting;
import rx.functions.Func1;
import java.util.ArrayList;
import java.util.List;
public class LinearWeightingStrategy<C> implements WeightingStrategy<C> {
private final Func1<C, Integer> func;
public LinearWeightingStrategy(Func1<C, Integer> func) {
this.func = func;
}
@Override
public ClientsAndWeights<C> call(List<C> clients) {
ArrayList<Integer> weights = new ArrayList<Integer>(clients.size());
if (!clients.isEmpty()) {
for (C client : clients) {
weights.add(func.call(client));
}
int sum = 0;
for (int i = 0; i < weights.size(); i++) {
sum += weights.get(i);
weights.set(i, sum);
}
}
return new ClientsAndWeights<C>(clients, weights);
}
}