// 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.Object2ObjectMap; import it.unimi.dsi.fastutil.objects.ObjectSet; import it.univr.di.labeledvalue.ALabel; import it.univr.di.labeledvalue.Label; import it.univr.di.labeledvalue.LabeledALabelIntTreeMap; import it.univr.di.labeledvalue.LabeledLowerCaseValue; import javax.annotation.Nonnull; /** * Represents the behavior of a CSTNPSU edge. *

* A CSTNPSU edge is a {@link it.univr.di.cstnu.algorithms.CSTNU} edge where it is also possible to have more lower-case values. * So, lower-case values are represented as a set of lower-case values. * {@link LabeledLowerCaseValue} is NOT used. *

* 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 a 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 the labeled values' labels efficiently. Moreover, such views are not more valid if a value is added to or removed from the edge. * * @author posenato * @version $Rev$ */ @SuppressWarnings("InterfaceWithOnlyOneDirectInheritor") public interface CSTNPSUEdge extends BasicCSTNUEdge { /** * Clears the labeled lowercase values. */ void clearLowerCaseValues(); /** * Don't use this set for scanning that requires modifying the internal map; otherwise, this set will become invalid after the first modification. * * @return the set of all labeled values and all labeled lower-case ones. The labeled values have an empty ALabel. */ ObjectSet>> getAllLowerCaseAndLabeledValues(); /** * @param aLabel the lower-case label * * @return the set of all labels associated with lower-case label aLabel. */ ObjectSet