// SPDX-FileCopyrightText: 2020 Roberto Posenato // // SPDX-License-Identifier: LGPL-3.0-or-later package it.univr.di.cstnu.graph; import it.unimi.dsi.fastutil.objects.Object2IntMap; import it.unimi.dsi.fastutil.objects.Object2IntMap.Entry; import it.unimi.dsi.fastutil.objects.ObjectSet; import it.univr.di.labeledvalue.Label; import it.univr.di.labeledvalue.LabeledIntMap; /** * Represents the behavior of a CSTN edge. *
* In order to promote greater efficiency, some methods return a view of the internal data structures * (they are all methods that return a set of {@code Entry}). * Such view could be dangerous because it could be modified directly (don't do that!) * Such methods must be used only to read-only scan the labeled values or labeled values' labels in an efficiente way. * Moreover, such views are not more valid if a value is added to or removed from the edge. * * @author posenato * @version $Rev$ */ public interface CSTNEdge extends Edge { /** * @return the implementing class to represent labeled values */ @SuppressWarnings("SameReturnValue") Class getLabeledIntMapImplClass(); /** * @return the string representation of the internal labeled value mao. If there is no labeled values, return an empty string. */ String labeledValuesAsString(); /** * Uses inputLabeledValue as internal labeled value map. * * @param inputLabeledValue the labeledValue to use */ void setLabeledValueMap(LabeledIntMap inputLabeledValue); /** * @return the labeled values as a set. This is a view of the labeled value internal data structure.
* Don't scan this view to remove elements in LabeledValueSet. * The returned view stops to be valid if a labeled value is add to or remove from the edge. */ ObjectSet> getLabeledValues(); /** * @return the labels associated to the labeled values. * Such a set is independent of the internal structure. It could be used for scanning all the labeled value in order to add/remove using * only the methods {@link #mergeLabeledValue(Label, int)} or {@link #removeLabeledValue(Label)}. */ ObjectSet