/******************************************************************************* * 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.solvers.gibbs; import com.analog.lyric.dimple.events.IDimpleEventListener; import com.analog.lyric.dimple.events.SolverEventSource; import com.analog.lyric.dimple.events.SolverGraphEvent; /** * Base class for events that are raised from a {@link GibbsSolverGraph}. * * @since 0.08 * @author Christopher Barber */ public abstract class GibbsSolverGraphEvent extends SolverGraphEvent { /*----------- * Constants */ private static final long serialVersionUID = 1L; final static int GRAPH_EVENT_MASK = 0xFFFF7000; final static int GRAPH_EVENTS_KNOWN = 0xFFFF1000; final static int GRAPH_BURNIN = 0xFFFF2000; final static int GRAPH_SAMPLE_STATS = 0xFFFF4000; /*-------------- * Construction */ GibbsSolverGraphEvent(GibbsSolverGraph source) { super(source); } /*-------------------------- * SolverGraphEvent methods */ @Override public GibbsSolverGraph getSource() { return (GibbsSolverGraph) source; } @Override public GibbsSolverGraph getSolverObject() { return (GibbsSolverGraph) source; } /*------------------------------- * GibbsSolverGraphEvent methods */ static boolean raiseBurnInEvent(GibbsSolverGraph source) { return (getEventFlags(source) & GRAPH_BURNIN) != 0; } static boolean raiseSampleStatsEvent(GibbsSolverGraph source) { return (getEventFlags(source) & GRAPH_SAMPLE_STATS) != 0; } private static int getEventFlags(SolverEventSource source) { int eventFlags = source.getFlagValue(GRAPH_EVENT_MASK); if ((eventFlags & GRAPH_EVENTS_KNOWN) == 0) { eventFlags = GRAPH_EVENTS_KNOWN; final IDimpleEventListener listener = source.getEventListener(); if (listener != null) { if (listener.isListeningFor(GibbsBurnInEvent.class, source)) { eventFlags |= GRAPH_BURNIN; } if (listener.isListeningFor(GibbsSampleStatisticsEvent.class, source)) { eventFlags |= GRAPH_SAMPLE_STATS; } } source.setFlagValue(GRAPH_EVENT_MASK, eventFlags); } return eventFlags; } }