package com.bumptech.glide.provider;
import android.support.annotation.Nullable;
import com.bumptech.glide.load.Encoder;
import com.bumptech.glide.util.Synthetic;
import java.util.ArrayList;
import java.util.List;
/**
* Contains an unordered list of {@link Encoder}s capable of encoding arbitrary data types.
*/
public class EncoderRegistry {
// TODO: This registry should probably contain a put, rather than a list.
private final List<Entry<?>> encoders = new ArrayList<>();
@SuppressWarnings("unchecked")
@Nullable
public synchronized <T> Encoder<T> getEncoder(Class<T> dataClass) {
for (Entry<?> entry : encoders) {
if (entry.handles(dataClass)) {
return (Encoder<T>) entry.encoder;
}
}
return null;
}
public synchronized <T> void add(Class<T> dataClass, Encoder<T> encoder) {
encoders.add(new Entry<>(dataClass, encoder));
}
private static final class Entry<T> {
private final Class<T> dataClass;
@Synthetic final Encoder<T> encoder;
public Entry(Class<T> dataClass, Encoder<T> encoder) {
this.dataClass = dataClass;
this.encoder = encoder;
}
public boolean handles(Class<?> dataClass) {
return this.dataClass.isAssignableFrom(dataClass);
}
}
}