/******************************************************************************* * Copyright 2015 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.core.parameterizedMessages; import java.io.PrintStream; import org.eclipse.jdt.annotation.Nullable; import com.analog.lyric.dimple.data.DataRepresentationType; import com.analog.lyric.dimple.model.domains.Domain; import com.analog.lyric.dimple.model.values.Value; import com.analog.lyric.util.misc.Matlab; /** * A singleton empty message with no parameters. * <p> * This may be used in place of null to allow non-null {@link IParameterizedMessage} fields or variables. * <p> * @since 0.08 * @author Christopher Barber */ public class NullMessage implements IParameterizedMessage, Cloneable { private static final long serialVersionUID = 1L; public static final NullMessage INSTANCE = new NullMessage(); /*-------------- * Construction */ private NullMessage() { } @Override public NullMessage clone() { return this; } /*--------- * IEquals */ @Override public boolean objectEquals(@Nullable Object other) { return other instanceof NullMessage; } /*-------- * IDatum */ @Override public DataRepresentationType representationType() { return DataRepresentationType.MESSAGE; } /*------------ * IPrintable */ @Override public void print(PrintStream out, int verbosity) { out.print(toString(verbosity)); } @Override public void println(PrintStream out, int verbosity) { out.println(toString(verbosity)); } @Override public String toString(int verbosity) { return toString(); } /*---------------------- * IUnaryFactorFunction */ @Override public double evalEnergy(Value value) { return 0; } @Override @Matlab public double evalEnergy(Object value) { return 0; } /*----------------------- * IParameterizedMessage */ @Override public void addFrom(IParameterizedMessage other) { } @Override public double computeKLDivergence(IParameterizedMessage that) { return 0; } @Override public double addNormalizationEnergy(double additionalEnergy) { return 0; } @Override public double getNormalizationEnergy() { return 0; } @Override public void setNormalizationEnergy(double energy) { } @Override public boolean hasDeterministicValue() { return false; } @Override public boolean isNull() { return true; } @Override public void setDeterministic(Value value) { throw new UnsupportedOperationException(); } @Override public void setFrom(IParameterizedMessage other) { } @Override public void setNull() { } @Override public void setUniform() { } @Override public @Nullable Value toDeterministicValue(Domain domain) { return null; } }