docs: public void match(ByteBuffer data, int size, IMtrieHandler func, XPub pub)
      {
          assert (data != null);
          assert (func != null);
          assert (pub != null);
          Mtrie current = this;
          int idx = 0;
  
          while (true) {
              //  Signal the pipes attached to this node.
              if (current.pipes != null) {
                  for (Pipe it : current.pipes) {
                      func.invoke(it, null, 0, pub);
                  }
              }
  
              //  If we are at the end of the message, there's nothing more to match.
              if (size == 0) {
                  break;
              }
  
              //  If there are no subnodes in the trie, return.
              if (current.count == 0) {
                  break;
              }
  
              byte c = data.get(idx);
              //  If there's one subnode (optimisation).
              if (current.count == 1) {
                  if (c != current.min) {
                      break;
                  }
                  current = current.next[0];
                  idx++;
                  size--;
                  continue;
              }
  
              //  If there are multiple subnodes.
              if (c < current.min || c >= current.min + current.count) {
                  break;
              }
              if (current.next[c - current.min] == null) {
                  break;
              }
              current = current.next[c - current.min];
              idx++;
              size--;
          }
      }