/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.math.integration; import java.util.HashMap; import java.util.Map; /** * Factory class for 1-D integrators that do not take arguments. */ public final class RealFunctionIntegrator1DFactory { // TODO add more integration types /** Romberg integrator name */ public static final String ROMBERG = "Romberg"; /** {@link RombergIntegrator1D} */ public static final RombergIntegrator1D ROMBERG_INSTANCE = new RombergIntegrator1D(); /** Simpson integrator name */ public static final String SIMPSON = "Simpson"; /** {@link SimpsonIntegrator1D} */ public static final SimpsonIntegrator1D SIMPSON_INSTANCE = new SimpsonIntegrator1D(); /** Extended trapezoid integrator name */ public static final String EXTENDED_TRAPEZOID = "ExtendedTrapezoid"; /** {@link ExtendedTrapezoidIntegrator1D} */ public static final ExtendedTrapezoidIntegrator1D EXTENDED_TRAPEZOID_INSTANCE = new ExtendedTrapezoidIntegrator1D(); private static final Map<String, Integrator1D<Double, Double>> s_staticInstances; private static final Map<Class<?>, String> s_instanceNames; static { final Map<String, Integrator1D<Double, Double>> staticInstances = new HashMap<>(); final Map<Class<?>, String> instanceNames = new HashMap<>(); staticInstances.put(ROMBERG, ROMBERG_INSTANCE); instanceNames.put(ROMBERG_INSTANCE.getClass(), ROMBERG); staticInstances.put(SIMPSON, SIMPSON_INSTANCE); instanceNames.put(SIMPSON_INSTANCE.getClass(), SIMPSON); staticInstances.put(EXTENDED_TRAPEZOID, EXTENDED_TRAPEZOID_INSTANCE); instanceNames.put(EXTENDED_TRAPEZOID_INSTANCE.getClass(), EXTENDED_TRAPEZOID); s_staticInstances = new HashMap<>(staticInstances); s_instanceNames = new HashMap<>(instanceNames); } private RealFunctionIntegrator1DFactory() { } /** * Given a name, returns an instance of that integrator * @param integratorName The name of the integrator * @return The integrator * @throws IllegalArgumentException If the integrator name is null or there is no integrator for that name */ public static Integrator1D<Double, Double> getIntegrator(final String integratorName) { final Integrator1D<Double, Double> integrator = s_staticInstances.get(integratorName); if (integrator != null) { return integrator; } throw new IllegalArgumentException("Integrator " + integratorName + " not handled"); } /** * Given an integrator, returns its name * @param integrator The integrator * @return The name of that integrator (null if not found) */ public static String getIntegratorName(final Integrator1D<Double, Double> integrator) { if (integrator == null) { return null; } return s_instanceNames.get(integrator.getClass()); } }