/******************************************************************************* * Copyright 2014 Analog Devices, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ********************************************************************************/ package com.analog.lyric.dimple.events; import java.util.Comparator; import java.util.Iterator; import java.util.NavigableMap; import java.util.TreeMap; import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; import com.analog.lyric.dimple.model.core.BoundaryVariableAddEvent; import com.analog.lyric.dimple.model.core.BoundaryVariableRemoveEvent; import com.analog.lyric.dimple.model.core.FactorAddEvent; import com.analog.lyric.dimple.model.core.FactorRemoveEvent; import com.analog.lyric.dimple.model.core.SubgraphAddEvent; import com.analog.lyric.dimple.model.core.SubgraphRemoveEvent; import com.analog.lyric.dimple.model.core.VariableAddEvent; import com.analog.lyric.dimple.model.core.VariableRemoveEvent; import com.analog.lyric.dimple.model.variables.VariableChangeEvent; import com.analog.lyric.dimple.model.variables.VariablePriorChangeEvent; import com.analog.lyric.dimple.solvers.core.FactorToVariableMessageEvent; import com.analog.lyric.dimple.solvers.core.VariableToFactorMessageEvent; import com.analog.lyric.dimple.solvers.gibbs.GibbsScoredVariableUpdateEvent; import com.analog.lyric.dimple.solvers.gibbs.GibbsSolverVariableEvent; import com.analog.lyric.dimple.solvers.gibbs.GibbsVariableUpdateEvent; import com.google.common.collect.Iterators; /** * Singleton enumeration of standard {@link DimpleEvent} subclasses. * * @since 0.06 * @author Christopher Barber */ public enum StandardDimpleEvents implements Iterable<Class<? extends DimpleEvent>> { INSTANCE; /*------- * State */ private final NavigableMap<String,Class<? extends DimpleEvent>> _eventTypes; @NonNullByDefault(false) private static enum Caseless implements Comparator<String> { COMPARATOR; @Override public int compare(String s1, String s2) { return s1.compareToIgnoreCase(s2); } } /*-------------- * Construction */ @SuppressWarnings("unchecked") private StandardDimpleEvents() { _eventTypes = new TreeMap<String,Class<? extends DimpleEvent>>(Caseless.COMPARATOR); @SuppressWarnings("deprecation") final Class<?>[] eventTypes = new Class<?>[] { BoundaryVariableAddEvent.class, BoundaryVariableRemoveEvent.class, DataEvent.class, DimpleEvent.class, FactorAddEvent.class, FactorGraphEvent.class, FactorGraphFactorEvent.class, FactorGraphSubgraphEvent.class, FactorGraphVariableEvent.class, FactorRemoveEvent.class, FactorToVariableMessageEvent.class, GibbsScoredVariableUpdateEvent.class, GibbsSolverVariableEvent.class, GibbsVariableUpdateEvent.class, ModelEvent.class, SolverEvent.class, SolverFactorEvent.class, SolverVariableEvent.class, SubgraphAddEvent.class, SubgraphRemoveEvent.class, VariableAddEvent.class, VariablePriorChangeEvent.class, VariableRemoveEvent.class, VariableChangeEvent.class, com.analog.lyric.dimple.model.variables.VariableFixedValueChangeEvent.class, com.analog.lyric.dimple.model.variables.VariableInputChangeEvent.class, VariableToFactorMessageEvent.class }; for (Class<?> eventType : eventTypes) { _eventTypes.put(eventType.getSimpleName(), (Class<? extends DimpleEvent>) eventType); } } /*------------------ * Iterable methods */ @Override public Iterator<Class<? extends DimpleEvent>> iterator() { return Iterators.unmodifiableIterator(_eventTypes.values().iterator()); } /*------------------------------- * Collection compatible methods */ public int size() { return _eventTypes.size(); } public @Nullable Class<? extends DimpleEvent> get(String name) { return _eventTypes.get(name); } }