code: public NewChunk asciiTrim(NewChunk nc) {
      // copy existing data
      nc = this.extractRows(nc, 0,_len);
      //update offsets and byte array
      for(int i=0; i < _len; i++) {
        int j = 0;
        int off = UnsafeUtils.get4(_mem,idx(i));
        if (off != NA) {
          //UTF chars will appear as negative values. In Java spec, space is any char 0x20 and lower
          while( _mem[_valstart+off+j] > 0 && _mem[_valstart+off+j] < 0x21) j++;
          if (j > 0) nc.set_is(i,off + j);
          while( _mem[_valstart+off+j] != 0 ) j++; //Find end
          j--;
          while( _mem[_valstart+off+j] > 0 && _mem[_valstart+off+j] < 0x21) { //March back to find first non-space
            nc._ss[off+j] = 0; //Set new end
            j--;
          }
        }
      }
      return nc;
    }
docs: Optimized trim() method to operate across the entire CStrChunk buffer in one pass.
  This mimics Java String.trim() by only considering characters of value
  <code>'&#92;u0020'</code> or less as whitespace to be trimmed. This means that like
  Java's String.trim() it ignores 16 of the 17 characters regarded as a space in UTF.
  
  NewChunk is the same size as the original, despite trimming.
  
  @param nc NewChunk to be filled with trimmed version of strings in this chunk
  @return Filled NewChunk