code: public ElemAttrs buildAttrOb()
      {
          int count = mAttrCount;
          if (count == 0) {
              return null;
          }
          // If we have actual attributes, let's first just create the
          // raw array that has all attribute information:
          String[] raw = new String[count << 2];
          for (int i = 0; i < count; ++i) {
              Attribute attr = mAttributes[i];
              int ix = (i << 2);
              raw[ix] = attr.mLocalName;
              raw[ix+1] = attr.mNamespaceURI;
              raw[ix+2] = attr.mPrefix;
              raw[ix+3] = getValue(i);
          }
  
          // Do we have a "short" list?
          if (count < LONG_ATTR_LIST_LEN) {
              return new ElemAttrs(raw, mNonDefCount);
          }
  
          // Ok, nope; we need to also pass the Map information...
          /* 02-Feb-2009, TSa: Must make a copy of the Map array now,
           *   otherwise could get overwritten.
           */
          int amapLen = mAttrMap.length;
          int[] amap = new int[amapLen];
          // TODO: JDK 1.6 has Arrays.copyOf(), should use with Woodstox 6
          System.arraycopy(mAttrMap, 0, amap, 0, amapLen);
          return new ElemAttrs(raw, mNonDefCount,
                               amap, mAttrHashSize, mAttrSpillEnd);
      }
docs: Method needed by event creating code, to build a non-transient
  attribute container, to use with XMLEvent objects (specifically
  implementation of StartElement event).