code: @Override
      public boolean put(String s, V v) {
          int t = 0;
          int limit = s.length();
          int last = 0;
          for (int k = 0; k < limit; k++) {
              char c = s.charAt(k);
              if (isCaseInsensitive() && c < 128)
                  c = StringUtils.lowercases[c];
  
              while (true) {
                  int row = ROW_SIZE * t;
  
                  // Do we need to create the new row?
                  if (t == _rows) {
                      _rows++;
                      if (_rows >= _key.length) {
                          _rows--;
                          return false;
                      }
                      _tree[row] = c;
                  }
  
                  char n = _tree[row];
                  int diff = n - c;
                  if (diff == 0)
                      t = _tree[last = (row + EQ)];
                  else if (diff < 0)
                      t = _tree[last = (row + LO)];
                  else
                      t = _tree[last = (row + HI)];
  
                  // do we need a new row?
                  if (t == 0) {
                      t = _rows;
                      _tree[last] = (char) t;
                  }
  
                  if (diff == 0)
                      break;
              }
          }
  
          // Do we need to create the new row?
          if (t == _rows) {
              _rows++;
              if (_rows >= _key.length) {
                  _rows--;
                  return false;
              }
          }
  
          // Put the key and value
          _key[t] = v == null ? null : s;
          _value[t] = v;
  
          return true;
      }
docs: /* ------------------------------------------------------------