void addChild(byte value, ByteTrieNode<T> child) {
		value = transformByte(value);
		@SuppressWarnings("unchecked")
		ByteTrieNode<T>[] newChildren = new ByteTrieNode[children.length + 1];
		if (children.length == 0) {
			newChildren[0] = child;
			children = newChildren;
			return;
		}
		if (children.length == 1) {
			if (value < transformByte(children[0].getId())) {
				newChildren[0] = child;
				newChildren[1] = children[0];
			}
			else {
				newChildren[0] = children[0];
				newChildren[1] = child;
			}
			children = newChildren;
			return;
		}
		int newChildIndex = findIndex(value);
		for (int ii = 0; ii < newChildIndex; ++ii) {
			newChildren[ii] = children[ii];
		}
		newChildren[newChildIndex] = child;
		for (int ii = newChildIndex + 1; ii < newChildren.length; ++ii) {
			newChildren[ii] = children[ii - 1];
		}
		children = newChildren;
	}
Adds a child to children.  Note that we're using two quick static
size cases (0 and 1) to speed things up early on, and then binary
search on the children array to find the index.  We then allocate
a new array and insert the new node at the appropriate index, so
this operation is big-O of lg n.
@param value the byte value
@param child the child node
Ghidra/Features/Base/src/main/java/ghidra/util/search/trie/ByteTrieNode.java