javadoc and branchless hilo
This commit is contained in:
parent
53278e5121
commit
60828fe8a3
|
@ -26,6 +26,19 @@ import java.util.Set;
|
||||||
/* ------------------------------------------------------------ */
|
/* ------------------------------------------------------------ */
|
||||||
/** A Ternary Trie String lookup data structure.
|
/** A Ternary Trie String lookup data structure.
|
||||||
* This Trie is of a fixed size and cannot grow (which can be a good thing with regards to DOS when used as a cache).
|
* This Trie is of a fixed size and cannot grow (which can be a good thing with regards to DOS when used as a cache).
|
||||||
|
* <p>
|
||||||
|
* The Trie is stored in 3 arrays:<dl>
|
||||||
|
* <dt>char[] _tree</dt><dd>This is semantically 2 dimensional array flattened into a 1 dimensional char array. The second dimension
|
||||||
|
* is that every 4 sequential elements represents a row of: character; hi index; eq index; low index, used to build a
|
||||||
|
* ternary trie of key strings.</dd>
|
||||||
|
* <dt>String[] _key<dt><dd>An array of key values where each element matches a row in the _tree array. A non zero key element
|
||||||
|
* indicates that the _tree row is a complete key rather than an intermediate character of a longer key.</dd>
|
||||||
|
* <dt>V[] _value</dt><dd>An array of values corresponding to the _key array</dd>
|
||||||
|
* </dl>
|
||||||
|
* <p>The lookup of a value will iterate through the _tree array matching characters. If the equal tree branch is followed,
|
||||||
|
* then the _key array is looked up to see if this is a complete match. If a match is found then the _value array is looked up
|
||||||
|
* to return the matching value.
|
||||||
|
* </p>
|
||||||
* @param <V>
|
* @param <V>
|
||||||
*/
|
*/
|
||||||
public class ArrayTernaryTrie<V> extends AbstractTrie<V>
|
public class ArrayTernaryTrie<V> extends AbstractTrie<V>
|
||||||
|
@ -59,7 +72,6 @@ public class ArrayTernaryTrie<V> extends AbstractTrie<V>
|
||||||
*/
|
*/
|
||||||
private final Object[] _value;
|
private final Object[] _value;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The number of rows allocated
|
* The number of rows allocated
|
||||||
*/
|
*/
|
||||||
|
@ -183,7 +195,7 @@ public class ArrayTernaryTrie<V> extends AbstractTrie<V>
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
t=_tree[row+((diff<0)?LO:HI)];
|
t=_tree[row+hilo(diff)];
|
||||||
if (t==0)
|
if (t==0)
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -223,7 +235,7 @@ public class ArrayTernaryTrie<V> extends AbstractTrie<V>
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
t=_tree[row+((diff<0)?LO:HI)];
|
t=_tree[row+hilo(diff)];
|
||||||
if (t==0)
|
if (t==0)
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -279,7 +291,7 @@ public class ArrayTernaryTrie<V> extends AbstractTrie<V>
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
t=_tree[row+((diff<0)?LO:HI)];
|
t=_tree[row+hilo(diff)];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
@ -328,7 +340,7 @@ public class ArrayTernaryTrie<V> extends AbstractTrie<V>
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
t=_tree[row+((diff<0)?LO:HI)];
|
t=_tree[row+hilo(diff)];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
@ -369,7 +381,7 @@ public class ArrayTernaryTrie<V> extends AbstractTrie<V>
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
t=_tree[row+((diff<0)?LO:HI)];
|
t=_tree[row+hilo(diff)];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
@ -418,6 +430,12 @@ public class ArrayTernaryTrie<V> extends AbstractTrie<V>
|
||||||
return _rows+1==_key.length;
|
return _rows+1==_key.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static int hilo(int diff)
|
||||||
|
{
|
||||||
|
// branchless equivalent to return ((diff<0)?LO:HI);
|
||||||
|
// return 3+2*((diff&Integer.MIN_VALUE)>>Integer.SIZE-1);
|
||||||
|
return 1+(diff|Integer.MAX_VALUE)/(Integer.MAX_VALUE/2);
|
||||||
|
}
|
||||||
|
|
||||||
public void dump()
|
public void dump()
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue