Class ResetCounterObservableSUL<S,​I,​O>

    • Constructor Detail

      • ResetCounterObservableSUL

        public ResetCounterObservableSUL​(String name,
                                         ObservableSUL<S,​I,​O> sul)
    • Method Detail

      • fork

        public ObservableSUL<S,​I,​O> fork()
        Description copied from interface: SUL
        Forks this SUL, if possible. The fork of a SUL is a copy which behaves exactly the same as this SUL. This method should always return a reseted SUL, regardless of whether this call is made between a call to SUL.pre() and SUL.post().

        If SUL.canFork() returns true, this method must return a non-null object, which should behave exactly like this SUL (in particular, it must be forkable as well). Otherwise, a UnsupportedOperationException must be thrown.

        Implementation note: if resetting a SUL changes the internal state of this object in a non-trivial way (e.g., incrementing a counter to ensure independent sessions), care must be taken that forks of this SUL manipulate the same internal state.

        Specified by:
        fork in interface ObservableSUL<S,​I,​O>
        Specified by:
        fork in interface SUL<S,​I>
        Overrides:
        fork in class ResetCounterSUL<I,​O>
        Returns:
        a fork of this SUL.
      • getState

        public S getState()
        Description copied from interface: ObservableSUL
        Returns the current state of the system.

        Implementation note: it is important that the returned Object has a well-defined Object.equals(Object) method, and a good Object.hashCode() function.

        Specified by:
        getState in interface ObservableSUL<S,​I,​O>
        Returns:
        the current state of the system.
      • deepCopies

        public boolean deepCopies()
        Description copied from interface: ObservableSUL
        Returns whether each state retrieved with ObservableSUL.getState() is a deep copy.

        A state is a deep copy if calls to either SUL.step(Object), SUL.pre(), or SUL.post() do not modify any state previously obtained with ObservableSUL.getState().

        More formally (assuming a perfect hash function): the result must be false if there is a case where in the following statements the assertion does not hold: Object o = getState(); int hc = o.hashCode(); [step(...)|pre()|post()]; assert o.hashCode() == hc; Furthermore, if states can be retrieved, but each state is not a deep copy, then this SUL must be forkable, i.e. if !ObservableSUL.deepCopies() then SUL.canFork() must hold.

        Specified by:
        deepCopies in interface ObservableSUL<S,​I,​O>
        Returns:
        whether each state is a deep copy.