// 
// Decompiled by Procyon v0.6.0
// 

package com.hypixel.hytale.server.core.universe.datastore;

import javax.annotation.Nonnull;
import java.util.Iterator;
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
import java.util.Map;
import java.util.List;
import javax.annotation.Nullable;
import java.io.IOException;
import com.hypixel.hytale.codec.builder.BuilderCodec;

public interface DataStore<T>
{
    BuilderCodec<T> getCodec();
    
    @Nullable
    T load(final String p0) throws IOException;
    
    void save(final String p0, final T p1);
    
    void remove(final String p0) throws IOException;
    
    List<String> list() throws IOException;
    
    @Nonnull
    default Map<String, T> loadAll() throws IOException {
        final Map<String, T> map = new Object2ObjectOpenHashMap<String, T>();
        for (final String id : this.list()) {
            final T value = this.load(id);
            if (value == null) {
                continue;
            }
            map.put(id, value);
        }
        return map;
    }
    
    default void saveAll(@Nonnull final Map<String, T> objectsToSave) {
        for (final Map.Entry<String, T> entry : objectsToSave.entrySet()) {
            this.save(entry.getKey(), entry.getValue());
        }
    }
    
    default void removeAll() throws IOException {
        for (final String id : this.list()) {
            this.remove(id);
        }
    }
}
