code: @Override
      public EncodedElement addInt(int input, int bitCount) {
          byteArrayValid = false;
          if(next != null) {
              EncodedElement end = EncodedElement_32.getEnd_S(next);
              return end.addInt(input, bitCount);
          }
          else if(data_32.length*32 < usableBits+bitCount) {
              //create child and attach to next.
              //Set child's offset appropriately(i.e, manually set usable bits)
              int tOff = usableBits %32;
              //int size = data.length/2+1;
              int size = 1000;
              //guarantee that our new element can store our given value
              //if(size <= bitCount+tOff) size = (size+tOff+bitCount)*10;
  
              next = new EncodedElement_32(size, tOff);
              System.err.println("creating next node of size:bitCount "+size+
                      ":"+bitCount+":"+usableBits+":"+data_32.length);
              System.err.println("value: "+input);
                      //+this.toString()+"::"+next.toString());
              //add int to child
              return next.addInt(input, bitCount);
          }
          else {
              //At this point, we have the space, and we are the end of the chain.
              int startPos = this.usableBits;
              int[] dest = this.data_32;
              EncodedElement_32.addInt(input, bitCount, startPos, dest);
              usableBits +=  bitCount;
              return this;
          }
      }
docs: Add a number of bits from an int to the end of this list's data. Will
  add a new element if necessary. The bits stored are taken from the lower-
  order of input.
  
  @param input Int containing bits to append to end.
  @param bitCount Number of bits to append.
  @return EncodedElement which actually contains the appended value.