Refactor ExtraCore

This commit is contained in:
SerpentSpirale 2022-02-25 23:28:24 +01:00 committed by ArtDev
parent d18faffce6
commit 6fe447410c

View File

@ -17,24 +17,24 @@ public final class ExtraCore {
private ExtraCore(){} private ExtraCore(){}
// Singleton instance // Singleton instance
private static ExtraCore extraCoreSingleton = null; private static ExtraCore sExtraCoreSingleton = null;
// Store the key-value pair // Store the key-value pair
private final Map<String, Object> valueMap = new ConcurrentHashMap<>(); private final Map<String, Object> mValueMap = new ConcurrentHashMap<>();
// Store what each ExtraListener listen to // Store what each ExtraListener listen to
private final Map<String, ConcurrentLinkedQueue<WeakReference<ExtraListener>>> listenerMap = new ConcurrentHashMap<>(); private final Map<String, ConcurrentLinkedQueue<WeakReference<ExtraListener>>> mListenerMap = new ConcurrentHashMap<>();
// All public methods will pass through this one // All public methods will pass through this one
private static ExtraCore getInstance(){ private static ExtraCore getInstance(){
if(extraCoreSingleton == null){ if(sExtraCoreSingleton == null){
synchronized(ExtraCore.class){ synchronized(ExtraCore.class){
if(extraCoreSingleton == null){ if(sExtraCoreSingleton == null){
extraCoreSingleton = new ExtraCore(); sExtraCoreSingleton = new ExtraCore();
} }
} }
} }
return extraCoreSingleton; return sExtraCoreSingleton;
} }
/** /**
@ -45,8 +45,8 @@ public final class ExtraCore {
public static void setValue(String key, Object value){ public static void setValue(String key, Object value){
if(value == null || key == null) return; // null values create an NPE on insertion if(value == null || key == null) return; // null values create an NPE on insertion
getInstance().valueMap.put(key, value); getInstance().mValueMap.put(key, value);
ConcurrentLinkedQueue<WeakReference<ExtraListener>> extraListenerList = getInstance().listenerMap.get(key); ConcurrentLinkedQueue<WeakReference<ExtraListener>> extraListenerList = getInstance().mListenerMap.get(key);
if(extraListenerList == null) return; //No listeners if(extraListenerList == null) return; //No listeners
for(WeakReference<ExtraListener> listener : extraListenerList){ for(WeakReference<ExtraListener> listener : extraListenerList){
if(listener.get() == null){ if(listener.get() == null){
@ -63,17 +63,17 @@ public final class ExtraCore {
/** @return The value behind the key */ /** @return The value behind the key */
public static Object getValue(String key){ public static Object getValue(String key){
return getInstance().valueMap.get(key); return getInstance().mValueMap.get(key);
} }
/** Remove the key and its value from the valueMap */ /** Remove the key and its value from the valueMap */
public static void removeValue(String key){ public static void removeValue(String key){
getInstance().valueMap.remove(key); getInstance().mValueMap.remove(key);
} }
/** Remove all values */ /** Remove all values */
public static void removeAllValues(){ public static void removeAllValues(){
getInstance().valueMap.clear(); getInstance().mValueMap.clear();
} }
/** /**
@ -82,11 +82,11 @@ public final class ExtraCore {
* @param listener The ExtraListener to link * @param listener The ExtraListener to link
*/ */
public static void addExtraListener(String key, ExtraListener listener){ public static void addExtraListener(String key, ExtraListener listener){
ConcurrentLinkedQueue<WeakReference<ExtraListener>> listenerList = getInstance().listenerMap.get(key); ConcurrentLinkedQueue<WeakReference<ExtraListener>> listenerList = getInstance().mListenerMap.get(key);
// Look for new sets // Look for new sets
if(listenerList == null){ if(listenerList == null){
listenerList = new ConcurrentLinkedQueue<>(); listenerList = new ConcurrentLinkedQueue<>();
getInstance().listenerMap.put(key, listenerList); getInstance().mListenerMap.put(key, listenerList);
} }
// This is kinda naive, I should look for duplicates // This is kinda naive, I should look for duplicates
@ -100,11 +100,11 @@ public final class ExtraCore {
* @param listener The ExtraListener to unlink * @param listener The ExtraListener to unlink
*/ */
public static void removeExtraListenerFromValue(String key, ExtraListener listener){ public static void removeExtraListenerFromValue(String key, ExtraListener listener){
ConcurrentLinkedQueue<WeakReference<ExtraListener>> listenerList = getInstance().listenerMap.get(key); ConcurrentLinkedQueue<WeakReference<ExtraListener>> listenerList = getInstance().mListenerMap.get(key);
// Look for new sets // Look for new sets
if(listenerList == null){ if(listenerList == null){
listenerList = new ConcurrentLinkedQueue<>(); listenerList = new ConcurrentLinkedQueue<>();
getInstance().listenerMap.put(key, listenerList); getInstance().mListenerMap.put(key, listenerList);
} }
// Removes all occurrences of ExtraListener and all null references // Removes all occurrences of ExtraListener and all null references
@ -122,11 +122,11 @@ public final class ExtraCore {
* @param key The key to which ExtraListener are linked * @param key The key to which ExtraListener are linked
*/ */
public static void removeAllExtraListenersFromValue(String key){ public static void removeAllExtraListenersFromValue(String key){
ConcurrentLinkedQueue<WeakReference<ExtraListener>> listenerList = getInstance().listenerMap.get(key); ConcurrentLinkedQueue<WeakReference<ExtraListener>> listenerList = getInstance().mListenerMap.get(key);
// Look for new sets // Look for new sets
if(listenerList == null){ if(listenerList == null){
listenerList = new ConcurrentLinkedQueue<>(); listenerList = new ConcurrentLinkedQueue<>();
getInstance().listenerMap.put(key, listenerList); getInstance().mListenerMap.put(key, listenerList);
} }
listenerList.clear(); listenerList.clear();
@ -136,7 +136,7 @@ public final class ExtraCore {
* Remove all ExtraListeners from listening to any value * Remove all ExtraListeners from listening to any value
*/ */
public static void removeAllExtraListeners(){ public static void removeAllExtraListeners(){
getInstance().listenerMap.clear(); getInstance().mListenerMap.clear();
} }
} }