code: public void addStr(Object str) {
      if(_id == null || str != null) {
        if(_is == null || _sparseLen >= _is.length) {
          append2slowstr();
          addStr(str);
          assert _sparseLen <= _len;
          return;
        }
        if (str != null) {
          if(_id != null)_id[_sparseLen] = _len;
          _is[_sparseLen] = _sslen;
          _sparseLen++;
          if (str instanceof BufferedString)
            append_ss((BufferedString) str);
          else // this spares some callers from an unneeded conversion to BufferedString first
            append_ss((String) str);
        } else if (_id == null) {
          _is[_sparseLen] = CStrChunk.NA;
          set_sparseLen(_sparseLen + 1);
        }
      }
      set_len(_len + 1);
      assert _sparseLen <= _len;
    }
docs: TODO cleanup