private int pushNsDecls() {
    int total = nsContext.count();
    NamespaceContextImpl.Element ns = nsContext.getCurrent();

    if (total > prefixes.length) {
      // reallocate
      int m = Math.max(total, prefixes.length * 2);
      Encoded[] buf = new Encoded[m];
      System.arraycopy(prefixes, 0, buf, 0, prefixes.length);
      for (int i = prefixes.length; i < buf.length; i++) buf[i] = new Encoded();
      prefixes = buf;
    }

    int base = Math.min(prefixCount, ns.getBase());
    int size = nsContext.count();
    for (int i = base; i < size; i++) {
      String p = nsContext.getPrefix(i);

      Encoded e = prefixes[i];

      if (p.length() == 0) {
        e.buf = EMPTY_BYTE_ARRAY;
        e.len = 0;
      } else {
        e.set(p);
        e.append(':');
      }
    }
    prefixCount = size;
    return base;
  }
  protected void writeNsDecls(int base) throws IOException {
    NamespaceContextImpl.Element ns = nsContext.getCurrent();
    int size = nsContext.count();

    for (int i = ns.getBase(); i < size; i++) writeNsDecl(i);
  }