docs: public String getState()
    {
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.entry(tc, "getState");
  
      //The only valid states in the SourceStream are Uncommitted,
      //Value and Completed so all tick ranges will be in one of
      //these states
      TickRange range = getTickRange();
      
      long firstSendPending = RangeList.INFINITY;
      if(_stream instanceof SourceStream)
        firstSendPending = ((SourceStream)_stream).getFirstMsgOutsideWindow();
    
      //we're actually only interested in Uncommitted and Value
      //Uncommitted maps to COMMITTING
      //Value before the in-doubt cursor are PENDING_ACK
      //Value after the in-doubt cursor are PENDING_SEND
      State state = State.COMPLETE;
      if(range.type == TickRange.Uncommitted)
        state = State.COMMITTING;
      else if(range.type == TickRange.Value && _tick < firstSendPending)
        state = State.PENDING_ACKNOWLEDGEMENT;
      else if(range.type == TickRange.Value && _tick >= firstSendPending)
        state = State.PENDING_SEND;
        
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.exit(tc, "getState", state);
  
      return state.toString();
    }