code: @Override
      public boolean put(String s, V v) {
          int t = 0;
          int k;
          int limit = s.length();
          for (k = 0; k < limit; k++) {
              char c = s.charAt(k);
  
              int index = __lookup[c & 0x7f];
              if (index >= 0) {
                  int idx = t * ROW_SIZE + index;
                  t = _rowIndex[idx];
                  if (t == 0) {
                      if (++_rows >= _value.length)
                          return false;
                      t = _rowIndex[idx] = _rows;
                  }
              } else if (c > 127)
                  throw new IllegalArgumentException("non ascii character");
              else {
                  if (_bigIndex == null)
                      _bigIndex = new char[_value.length][];
                  if (t >= _bigIndex.length)
                      return false;
                  char[] big = _bigIndex[t];
                  if (big == null)
                      big = _bigIndex[t] = new char[128];
                  t = big[c];
                  if (t == 0) {
                      if (_rows == _value.length)
                          return false;
                      t = big[c] = ++_rows;
                  }
              }
          }
  
          if (t >= _key.length) {
              _rows = (char) _key.length;
              return false;
          }
  
          _key[t] = v == null ? null : s;
          _value[t] = v;
          return true;
      }
docs: /* ------------------------------------------------------------