code: boolean checkPrefix(char[] chars, int[] cursor) {
      if (chars.length > cursor[0] && chars[cursor[0]] == MatchSpace.NONWILD_MARKER)
        return false;
      if (prefix == null)
        return true;
      if (cursor[1] - cursor[0] < prefix.minlen)
        // a conservative test, but if we can't pass it, we'll certainly fail later
        return false;
      for (int i = 0; i < prefix.items.length; i++) {
        Object item = prefix.items[i];
        if (item == Pattern.matchOne)
          if (!topicSkipForward(chars, cursor))
            return false;
          else
            ; // topic skip succeeded so continue
        else if (!matchForward(chars, (char[]) item, cursor))
          return false;
        // else this phase succeeded so continue
      }
      // The prefix matches exactly.  But, unless we are at the end of the string,
      // the next character MUST be a separator.
      return cursor[0] == cursor[1] || 
        chars[cursor[0]] == MatchSpace.SUBTOPIC_SEPARATOR_CHAR;
    }
docs: Override checkPrefix to implement topic semantics