// SPDX-FileCopyrightText: 2020 Roberto Posenato // // SPDX-License-Identifier: LGPL-3.0-or-later package it.univr.di.cstnu.graph; import it.univr.di.labeledvalue.ALabel; import it.univr.di.labeledvalue.Label; import it.univr.di.labeledvalue.LabeledLowerCaseValue; /** * Represents the behavior of a CSTNU edge. * A CSTNU edge can be (mutually exclusive): *
    *
  1. ordinary (one or more labeled values)
  2. *
  3. lower-case (1 lower-case value)
  4. *
  5. upper-case (1 upper-case value)
  6. *
  7. wait (1 or more upper-case values)
  8. *
  9. ordinary and wait
  10. *
*
* 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$ */ @SuppressWarnings("InterfaceWithOnlyOneDirectInheritor") public interface CSTNUEdge extends BasicCSTNUEdge { /** * Removes the lower-case value from the edge. */ void removeLowerCaseValue(); /** * @return the labeled lower-case value object characteristics of a contingent/guarded link. Use * {@link it.univr.di.labeledvalue.LabeledLowerCaseValue#isEmpty()} to check if it contains or not a significant * value. */ LabeledLowerCaseValue getLowerCaseValue(); /** * Set a lower-case constraint with delay i for the node n with label l.
* If a lower-case label for node n is already present, it is overwritten. * * @param l It cannot be null or empty. * @param nodeName the node. It cannot be null. * @param i It cannot be null. */ void setLowerCaseValue(Label l, ALabel nodeName, int i); }