public Growing(boolean insensitive, int capacity, int growby) { _growby=growby; _trie = new ArrayTernaryTrie<>(insensitive,capacity); }
if(isCaseInsensitive()) c=(byte)StringUtil.lowercases[c]; V better=getBest(t,b,offset,len); if (better!=null) return better; t=_tree[row+hilo(diff)]; if (t==0) break loop;
@Override public V get(ByteBuffer b) { return _trie.get(b); }
public ContextRoutingHandler(Map<String, ? extends Handler> handlers) { this.handlers = new ArrayTernaryTrie<>(false); for (Map.Entry<String, ? extends Handler> entry : handlers.entrySet()) { if (!this.handlers.put(entry.getKey(), entry.getValue())) { throw new IllegalStateException("Too many handlers"); } addBean(entry.getValue()); } }
@Override public boolean put(String s, V v) { boolean added = _trie.put(s,v); while (!added && _growby>0) { ArrayTernaryTrie<V> bigger = new ArrayTernaryTrie<>(_trie._key.length+_growby); for (Map.Entry<String,V> entry : _trie.entrySet()) bigger.put(entry.getKey(),entry.getValue()); _trie = bigger; added = _trie.put(s,v); } return added; }
@Override public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { final Handler handler = handlers.getBest(baseRequest.getRequestURI()); if (handler != null) { handler.handle(target, baseRequest, request, response); } }
if(isCaseInsensitive() && c<128) c=StringUtil.lowercases[c]; t=_tree[row+hilo(diff)]; if (t==0) return null;
@Override public boolean isCaseInsensitive() { return _trie.isCaseInsensitive(); }
@Override public boolean put(V v) { return put(v.toString(),v); }
@Override public Set<String> keySet() { return _trie.keySet(); }
@Override public Handler[] getHandlers() { return handlers.entrySet().stream().map(e -> e.getValue()).toArray(Handler[]::new); } }
@Override public V getBest(byte[] b, int offset, int len) { return _trie.getBest(b,offset,len); }
@Override public boolean put(String s, V v) { boolean added = _trie.put(s,v); while (!added && _growby>0) { ArrayTernaryTrie<V> bigger = new ArrayTernaryTrie<>(_trie._key.length+_growby); for (Map.Entry<String,V> entry : _trie.entrySet()) bigger.put(entry.getKey(),entry.getValue()); _trie = bigger; added = _trie.put(s,v); } return added; }
if(isCaseInsensitive()) c=(byte)StringUtil.lowercases[c]; t=_tree[row+hilo(diff)]; if (t==0) return null;
/** Copy Trie and change capacity by a factor * @param trie the trie to copy from * @param factor the factor to grow the capacity by */ public ArrayTernaryTrie(ArrayTernaryTrie<V> trie, double factor) { super(trie.isCaseInsensitive()); int capacity=(int)(trie._value.length*factor); _rows=trie._rows; _value=Arrays.copyOf(trie._value, capacity); _tree=Arrays.copyOf(trie._tree, capacity*ROW_SIZE); _key=Arrays.copyOf(trie._key, capacity); }
@Override public boolean put(V v) { return put(v.toString(),v); }