code: private int getDataBlock(int ch) 
      {
          ch >>= SHIFT_;
          int indexValue = m_index_[ch];
          if (indexValue > 0) {
              return indexValue;
          }
      
          // allocate a new data block
          int newBlock = allocDataBlock();
          if (newBlock < 0) {
              // out of memory in the data array 
              return -1;
          }
          m_index_[ch] = newBlock;
      
          // copy-on-write for a block from a setRange()
          System.arraycopy(m_data_, Math.abs(indexValue), m_data_, newBlock,  
                           DATA_BLOCK_LENGTH << 2);
          return newBlock;
      }
docs: No error checking for illegal arguments.
  @param ch codepoint to look for
  @return -1 if no new data block available (out of memory in data array)