mirror of
				https://github.com/DanilaFe/abacus
				synced 2025-11-03 18:33:41 -08:00 
			
		
		
		
	Add attempt to find the number implementation from the class.
This commit is contained in:
		
							parent
							
								
									4fd30030f9
								
							
						
					
					
						commit
						b06e9fcbee
					
				@ -18,6 +18,18 @@ public abstract class NumberImplementation {
 | 
			
		||||
        promotionPaths = new HashMap<>();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public final Map<Class<? extends NumberInterface>, Function<NumberInterface, NumberInterface>> getPromotionPaths(){
 | 
			
		||||
        return promotionPaths;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public final Class<? extends NumberInterface> getImplementation(){
 | 
			
		||||
        return implementation;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public final int getPriority(){
 | 
			
		||||
        return priority;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public abstract NumberInterface instanceForString(String string);
 | 
			
		||||
    public abstract NumberInterface instanceForPi();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -2,6 +2,7 @@ package org.nwapw.abacus.plugin;
 | 
			
		||||
 | 
			
		||||
import org.nwapw.abacus.function.Function;
 | 
			
		||||
import org.nwapw.abacus.function.Operator;
 | 
			
		||||
import org.nwapw.abacus.number.NumberInterface;
 | 
			
		||||
 | 
			
		||||
import java.lang.reflect.InvocationTargetException;
 | 
			
		||||
import java.util.*;
 | 
			
		||||
@ -31,6 +32,7 @@ public class PluginManager {
 | 
			
		||||
     */
 | 
			
		||||
    private Map<String, Operator> cachedOperators;
 | 
			
		||||
    private Map<String, NumberImplementation> cachedNumberImplementations;
 | 
			
		||||
    private Map<Class<? extends NumberInterface>, NumberImplementation> cachedInterfaceImplementations;
 | 
			
		||||
    /**
 | 
			
		||||
     * List of all functions loaded by the plugins.
 | 
			
		||||
     */
 | 
			
		||||
@ -54,6 +56,7 @@ public class PluginManager {
 | 
			
		||||
        cachedFunctions = new HashMap<>();
 | 
			
		||||
        cachedOperators = new HashMap<>();
 | 
			
		||||
        cachedNumberImplementations = new HashMap<>();
 | 
			
		||||
        cachedInterfaceImplementations = new HashMap<>();
 | 
			
		||||
        allFunctions = new HashSet<>();
 | 
			
		||||
        allOperators = new HashSet<>();
 | 
			
		||||
        allNumberImplementations = new HashSet<>();
 | 
			
		||||
@ -117,6 +120,24 @@ public class PluginManager {
 | 
			
		||||
        return searchCached(plugins, cachedNumberImplementations, Plugin::providedNumberImplementations,
 | 
			
		||||
                Plugin::getNumberImplementation, name);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public NumberImplementation interfaceImplementationFor(Class<? extends NumberInterface> 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;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        cachedInterfaceImplementations.put(name, toReturn);
 | 
			
		||||
        return toReturn;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Adds an instance of Plugin that already has been instantiated.
 | 
			
		||||
     *
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user