// Path: src/com/torrosoft/triviazo/util/LRUCache.java
// public class LRUCache<K, V> {
//     private Map<K, V> cache;
//     private CacheEntryRemovedListener<K, V> entryRemovedListener;
// 
//     /**
//      * Creates the cache with the specified max entries.
//      */
//     public LRUCache(final int maxEntries) {
//         cache = new LinkedHashMap<K, V>(maxEntries + 1, .75F, true) {
//             /**
//              * Serial version UID.
//              */
//             private static final long serialVersionUID = -3773718296246105356L;
// 
//             @Override
//             public boolean removeEldestEntry(final Map.Entry<K, V> eldest) {
//                 if (size() > maxEntries) {
//                     if (entryRemovedListener != null) {
//                         entryRemovedListener.notifyEntryRemoved(
//                                 eldest.getKey(), eldest.getValue());
//                     }
// 
//                     return true;
//                 }
// 
//                 return false;
//             }
//         };
//     }
// 
//     public final void add(final K key, final V value) {
//         cache.put(key, value);
//     }
// 
//     public final V get(final K key) {
//         return cache.get(key);
//     }
// 
//     public final Collection<V> retrieveAll() {
//         return cache.values();
//     }
// 
//     public final void setEntryRemovedListener(
//             final CacheEntryRemovedListener<K, V> pEntryRemovedListener) {
//         entryRemovedListener = pEntryRemovedListener;
//     }
// 
//     /**
//      * Called when a cached element is about to be removed.
//      */
//     public interface CacheEntryRemovedListener<K, V> {
//         void notifyEntryRemoved(K key, V value);
//     }
// }
// 
// Path: src/com/torrosoft/triviazo/util/LRUCache.java
// public interface CacheEntryRemovedListener<K, V> {
//     void notifyEntryRemoved(K key, V value);
// }


import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.audio.Sound;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.utils.Disposable;
import com.torrosoft.triviazo.util.LRUCache;
import com.torrosoft.triviazo.util.LRUCache.CacheEntryRemovedListener;
        }
    }

    @Override
    public final void dispose() {
        for (final Sound sound : soundCache.retrieveAll()) {
            sound.stop();
            sound.dispose();
        }
    }

    @Override
    public final void notifyEntryRemoved(final TriviazoSound key, final Sound value) {
        value.dispose();
    }

    public final float getVolume() {
        return volume;
    }

    /**
     * Must be inside the range [0,1].
     * 
     * @param volume
     */
    public final void setVolume(final float pVolume) {
        // check and set the new volume
        if ((pVolume < 0) || (pVolume > 1f)) { throw new IllegalArgumentException(
                "The volume must be inside the range: [0,1]"); }

// Path: src/com/torrosoft/triviazo/util/LRUCache.java
// public class LRUCache<K, V> {
//     private Map<K, V> cache;
//     private CacheEntryRemovedListener<K, V> entryRemovedListener;
// 
//     /**
//      * Creates the cache with the specified max entries.
//      */
//     public LRUCache(final int maxEntries) {
//         cache = new LinkedHashMap<K, V>(maxEntries + 1, .75F, true) {
//             /**
//              * Serial version UID.
//              */
//             private static final long serialVersionUID = -3773718296246105356L;
// 
//             @Override
//             public boolean removeEldestEntry(final Map.Entry<K, V> eldest) {
//                 if (size() > maxEntries) {
//                     if (entryRemovedListener != null) {
//                         entryRemovedListener.notifyEntryRemoved(
//                                 eldest.getKey(), eldest.getValue());
//                     }
// 
//                     return true;
//                 }
// 
//                 return false;
//             }
//         };
//     }
// 
//     public final void add(final K key, final V value) {
//         cache.put(key, value);
//     }
// 
//     public final V get(final K key) {
//         return cache.get(key);
//     }
// 
//     public final Collection<V> retrieveAll() {
//         return cache.values();
//     }
// 
//     public final void setEntryRemovedListener(
//             final CacheEntryRemovedListener<K, V> pEntryRemovedListener) {
//         entryRemovedListener = pEntryRemovedListener;
//     }
// 
//     /**
//      * Called when a cached element is about to be removed.
//      */
//     public interface CacheEntryRemovedListener<K, V> {
//         void notifyEntryRemoved(K key, V value);
//     }
// }
// 
// Path: src/com/torrosoft/triviazo/util/LRUCache.java
// public interface CacheEntryRemovedListener<K, V> {
//     void notifyEntryRemoved(K key, V value);
// }


// Path: src/com/torrosoft/triviazo/services/music/SoundManager.java
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.audio.Sound;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.utils.Disposable;
import com.torrosoft.triviazo.util.LRUCache;
import com.torrosoft.triviazo.util.LRUCache.CacheEntryRemovedListener;

        }
    }

    @Override
    public final void dispose() {
        for (final Sound sound : soundCache.retrieveAll()) {
            sound.stop();
            sound.dispose();
        }
    }

    @Override
    public final void notifyEntryRemoved(final TriviazoSound key, final Sound value) {
        value.dispose();
    }

    public final float getVolume() {
        return volume;
    }

    /**
     * Must be inside the range [0,1].
     * 
     * @param volume
     */
    public final void setVolume(final float pVolume) {
        // check and set the new volume
        if ((pVolume < 0) || (pVolume > 1f)) { throw new IllegalArgumentException(
                "The volume must be inside the range: [0,1]"); }

        volume = pVolume;