From 44f018060d491f88292b993aec962306fb505caf Mon Sep 17 00:00:00 2001 From: Danila Fedorin Date: Sun, 6 Aug 2017 21:55:09 -0700 Subject: [PATCH 1/2] Remove the useless caching in the plugin manager and the maps in plugins --- .../java/org/nwapw/abacus/plugin/Plugin.java | 80 +-------- .../nwapw/abacus/plugin/PluginManager.java | 159 +++++++----------- 2 files changed, 61 insertions(+), 178 deletions(-) diff --git a/src/main/java/org/nwapw/abacus/plugin/Plugin.java b/src/main/java/org/nwapw/abacus/plugin/Plugin.java index b569dea..042f424 100644 --- a/src/main/java/org/nwapw/abacus/plugin/Plugin.java +++ b/src/main/java/org/nwapw/abacus/plugin/Plugin.java @@ -17,18 +17,6 @@ import java.util.Set; */ public abstract class Plugin { - /** - * A hash map of functions mapped to their string names. - */ - private Map functions; - /** - * A hash map of operators mapped to their string names. - */ - private Map operators; - /** - * The map of the number implementations this plugin provides. - */ - private Map numberImplementations; /** * The plugin manager in which to search for functions * not inside this package, @@ -49,69 +37,9 @@ public abstract class Plugin { */ public Plugin(PluginManager manager) { this.manager = manager; - functions = new HashMap<>(); - operators = new HashMap<>(); - numberImplementations = new HashMap<>(); enabled = false; } - /** - * Gets the list of functions provided by this plugin. - * - * @return the list of registered functions. - */ - public final Set providedFunctions() { - return functions.keySet(); - } - - /** - * Gets the list of functions provided by this plugin. - * - * @return the list of registered functions. - */ - public final Set providedOperators() { - return operators.keySet(); - } - - /** - * Gets the list of number implementations provided by this plugin. - * - * @return the list of registered number implementations. - */ - public final Set providedNumberImplementations() { - return numberImplementations.keySet(); - } - - /** - * Gets a function under the given function name. - * - * @param functionName the name of the function to get - * @return the function, or null if this plugin doesn't provide it. - */ - public final Function getFunction(String functionName) { - return functions.get(functionName); - } - - /** - * Gets an operator under the given operator name. - * - * @param operatorName the name of the operator to get. - * @return the operator, or null if this plugin doesn't provide it. - */ - public final Operator getOperator(String operatorName) { - return operators.get(operatorName); - } - - /** - * Gets the number implementation under the given name. - * - * @param name the name of the number implementation to look up. - * @return the number implementation associated with that name, or null if the plugin doesn't provide it. - */ - public final NumberImplementation getNumberImplementation(String name) { - return numberImplementations.get(name); - } - /** * Enables the function, loading the necessary instances * of functions. @@ -129,8 +57,6 @@ public abstract class Plugin { public final void disable() { if (!enabled) return; onDisable(); - functions.clear(); - operators.clear(); enabled = false; } @@ -142,7 +68,7 @@ public abstract class Plugin { * @param toRegister the function implementation. */ protected final void registerFunction(String name, Function toRegister) { - functions.put(name, toRegister); + manager.registerFunction(name, toRegister); } /** @@ -154,7 +80,7 @@ public abstract class Plugin { * @param operator the operator to register. */ protected final void registerOperator(String name, Operator operator) { - operators.put(name, operator); + manager.registerOperator(name, operator); } /** @@ -165,7 +91,7 @@ public abstract class Plugin { * @param implementation the actual implementation class to register. */ protected final void registerNumberImplementation(String name, NumberImplementation implementation) { - numberImplementations.put(name, implementation); + manager.registerNumberImplementation(name, implementation); } /** diff --git a/src/main/java/org/nwapw/abacus/plugin/PluginManager.java b/src/main/java/org/nwapw/abacus/plugin/PluginManager.java index b1e5143..e40b481 100644 --- a/src/main/java/org/nwapw/abacus/plugin/PluginManager.java +++ b/src/main/java/org/nwapw/abacus/plugin/PluginManager.java @@ -23,20 +23,17 @@ public class PluginManager { */ private Set plugins; /** - * List of functions that have been cached, - * that is, found in a plugin and returned. + * The map of functions registered by the plugins. */ - private Map cachedFunctions; + private Map registeredFunctions; /** - * List of operators that have been cached, - * that is, found in a plugin and returned. + * The map of operators registered by the plugins */ - private Map cachedOperators; + private Map registeredOperators; /** - * The list of number implementations that have - * been cached, that is, found in a plugin and returned. + * The map of number implementations registered by the plugins. */ - private Map cachedNumberImplementations; + private Map registeredNumberImplementations; /** * The list of number implementations that have been * found by their implementation class. @@ -46,18 +43,6 @@ public class PluginManager { * The pi values for each implementation class that have already been computer. */ private Map, NumberInterface> cachedPi; - /** - * List of all functions loaded by the plugins. - */ - private Set allFunctions; - /** - * List of all operators loaded by the plugins. - */ - private Set allOperators; - /** - * List of all the number implementations loaded by the plugins. - */ - private Set allNumberImplementations; /** * The list of plugin listeners attached to this instance. */ @@ -77,79 +62,66 @@ public class PluginManager { this.abacus = abacus; loadedPluginClasses = new HashSet<>(); plugins = new HashSet<>(); - cachedFunctions = new HashMap<>(); - cachedOperators = new HashMap<>(); - cachedNumberImplementations = new HashMap<>(); + registeredFunctions = new HashMap<>(); + registeredOperators = new HashMap<>(); + registeredNumberImplementations = new HashMap<>(); cachedInterfaceImplementations = new HashMap<>(); cachedPi = new HashMap<>(); - allFunctions = new HashSet<>(); - allOperators = new HashSet<>(); - allNumberImplementations = new HashSet<>(); listeners = new HashSet<>(); } /** - * Searches the plugin list for a certain value, retrieving the Plugin's - * list of items of the type using the setFunction and getting the value - * of it is available via getFunction. If the value is contained - * in the cache, it returns the cached value instead. - * - * @param plugins the plugin list to search. - * @param cache the cache to use - * @param setFunction the function to retrieve a set of available T's from the plugin - * @param getFunction the function to get the T value under the given name - * @param name the name to search for - * @param the type of element being search - * @param the type of key that the cache is indexed by. - * @return the retrieved element, or null if it was not found. + * Registers a function under the given name. + * @param name the name of the function. + * @param function the function to register. */ - private static T searchCached(Collection plugins, Map cache, - java.util.function.Function> setFunction, - java.util.function.BiFunction getFunction, - K name) { - if (cache.containsKey(name)) return cache.get(name); - - T loadedValue = null; - for (Plugin plugin : plugins) { - if (setFunction.apply(plugin).contains(name)) { - loadedValue = getFunction.apply(plugin, name); - break; - } - } - - cache.put(name, loadedValue); - return loadedValue; + public void registerFunction(String name, Function function){ + registeredFunctions.put(name, function); } /** - * Gets a function under the given name. - * - * @param name the name of the function - * @return the function under the given name. - */ - public Function functionFor(String name) { - return searchCached(plugins, cachedFunctions, Plugin::providedFunctions, Plugin::getFunction, name); - } - - /** - * Gets an operator under the given name. - * + * Registers an operator under the given name. * @param name the name of the operator. - * @return the operator under the given name. + * @param operator the operator to register. */ - public Operator operatorFor(String name) { - return searchCached(plugins, cachedOperators, Plugin::providedOperators, Plugin::getOperator, name); + public void registerOperator(String name, Operator operator){ + registeredOperators.put(name, operator); } /** - * Gets the number implementation under the given name. - * - * @param name the name of the implementation. - * @return the implementation. + * Registers a number implementation under the given name. + * @param name the name of the number implementation. + * @param implementation the number implementation to register. */ - public NumberImplementation numberImplementationFor(String name) { - return searchCached(plugins, cachedNumberImplementations, Plugin::providedNumberImplementations, - Plugin::getNumberImplementation, name); + public void registerNumberImplementation(String name, NumberImplementation implementation){ + registeredNumberImplementations.put(name, implementation); + } + + /** + * Gets the function registered under the given name. + * @param name the name of the function. + * @return the function, or null if it was not found. + */ + public Function functionFor(String name){ + return registeredFunctions.get(name); + } + + /** + * Gets the operator registered under the given name. + * @param name the name of the operator. + * @return the operator, or null if it was not found. + */ + public Operator operatorFor(String name){ + return registeredOperators.get(name); + } + + /** + * Gets the number implementation registered under the given name. + * @param name the name of the number implementation. + * @return the number implementation, or null if it was not found. + */ + public NumberImplementation numberImplementationFor(String name){ + return registeredNumberImplementations.get(name); } /** @@ -161,14 +133,11 @@ public class PluginManager { public NumberImplementation interfaceImplementationFor(Class name) { if (cachedInterfaceImplementations.containsKey(name)) return cachedInterfaceImplementations.get(name); NumberImplementation toReturn = null; - outside: - for (Plugin plugin : plugins) { - for (String implementationName : plugin.providedNumberImplementations()) { - NumberImplementation implementation = plugin.getNumberImplementation(implementationName); - if (implementation.getImplementation().equals(name)) { - toReturn = implementation; - break outside; - } + for(String key : registeredNumberImplementations.keySet()){ + NumberImplementation implementation = registeredNumberImplementations.get(key); + if(implementation.getImplementation() == name) { + toReturn = implementation; + break; } } cachedInterfaceImplementations.put(name, toReturn); @@ -227,12 +196,6 @@ public class PluginManager { if (disabledPlugins.contains(plugin.getClass().getName())) continue; plugin.enable(); } - for (Plugin plugin : plugins) { - if (disabledPlugins.contains(plugin.getClass().getName())) continue; - allFunctions.addAll(plugin.providedFunctions()); - allOperators.addAll(plugin.providedOperators()); - allNumberImplementations.addAll(plugin.providedNumberImplementations()); - } listeners.forEach(e -> e.onLoad(this)); } @@ -246,14 +209,8 @@ public class PluginManager { if (disabledPlugins.contains(plugin.getClass().getName())) continue; plugin.disable(); } - cachedFunctions.clear(); - cachedOperators.clear(); - cachedNumberImplementations.clear(); cachedInterfaceImplementations.clear(); cachedPi.clear(); - allFunctions.clear(); - allOperators.clear(); - allNumberImplementations.clear(); listeners.forEach(e -> e.onUnload(this)); } @@ -271,7 +228,7 @@ public class PluginManager { * @return the set of all functions that were loaded. */ public Set getAllFunctions() { - return allFunctions; + return registeredFunctions.keySet(); } /** @@ -280,7 +237,7 @@ public class PluginManager { * @return the set of all operators that were loaded. */ public Set getAllOperators() { - return allOperators; + return registeredOperators.keySet(); } /** @@ -289,7 +246,7 @@ public class PluginManager { * @return the set of all implementations that were loaded. */ public Set getAllNumberImplementations() { - return allNumberImplementations; + return registeredNumberImplementations.keySet(); } /** From 35254d3e99e7a9458f4dc2ff543735beafbc416f Mon Sep 17 00:00:00 2001 From: Danila Fedorin Date: Sun, 6 Aug 2017 21:56:49 -0700 Subject: [PATCH 2/2] Rename getPi to piFor. --- src/main/java/org/nwapw/abacus/plugin/Plugin.java | 2 +- src/main/java/org/nwapw/abacus/plugin/StandardPlugin.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/nwapw/abacus/plugin/Plugin.java b/src/main/java/org/nwapw/abacus/plugin/Plugin.java index 042f424..7a78764 100644 --- a/src/main/java/org/nwapw/abacus/plugin/Plugin.java +++ b/src/main/java/org/nwapw/abacus/plugin/Plugin.java @@ -139,7 +139,7 @@ public abstract class Plugin { * @param forClass the class to which to find the pi instance. * @return the pi value for the given class. */ - protected final NumberInterface getPi(Class forClass) { + protected final NumberInterface piFor(Class forClass) { return manager.piFor(forClass); } diff --git a/src/main/java/org/nwapw/abacus/plugin/StandardPlugin.java b/src/main/java/org/nwapw/abacus/plugin/StandardPlugin.java index 0e170fc..5ecf388 100755 --- a/src/main/java/org/nwapw/abacus/plugin/StandardPlugin.java +++ b/src/main/java/org/nwapw/abacus/plugin/StandardPlugin.java @@ -358,7 +358,7 @@ public class StandardPlugin extends Plugin { @Override protected NumberInterface applyInternal(NumberInterface[] params) { - NumberInterface pi = getPi(params[0].getClass()); + NumberInterface pi = piFor(params[0].getClass()); NumberInterface twoPi = pi.multiply(new NaiveNumber(2).promoteTo(pi.getClass())); NumberInterface theta = getSmallAngle(params[0], pi); //System.out.println(theta); @@ -382,7 +382,7 @@ public class StandardPlugin extends Plugin { @Override protected NumberInterface applyInternal(NumberInterface[] params) { - return functionSin.apply(getPi(params[0].getClass()).divide(new NaiveNumber(2).promoteTo(params[0].getClass())) + return functionSin.apply(piFor(params[0].getClass()).divide(new NaiveNumber(2).promoteTo(params[0].getClass())) .subtract(params[0])); } };