private void WriteRecursively(DataOutput @out, JaspellTernarySearchTrie.TSTNode node) { if (node == null) { return; } @out.WriteString(new string(new char[] { node.splitchar }, 0, 1)); sbyte mask = 0; if (node.relatives[JaspellTernarySearchTrie.TSTNode.LOKID] != null) { mask |= LO_KID; } if (node.relatives[JaspellTernarySearchTrie.TSTNode.EQKID] != null) { mask |= EQ_KID; } if (node.relatives[JaspellTernarySearchTrie.TSTNode.HIKID] != null) { mask |= HI_KID; } if (node.data != null) { mask |= HAS_VALUE; } @out.WriteByte((byte)mask); if (node.data != null) { @out.WriteInt64((long)(node.data)); } WriteRecursively(@out, node.relatives[JaspellTernarySearchTrie.TSTNode.LOKID]); WriteRecursively(@out, node.relatives[JaspellTernarySearchTrie.TSTNode.EQKID]); WriteRecursively(@out, node.relatives[JaspellTernarySearchTrie.TSTNode.HIKID]); }
private void ReadRecursively(DataInput @in, JaspellTernarySearchTrie.TSTNode node) { node.splitchar = @in.ReadString()[0]; sbyte mask = (sbyte)@in.ReadByte(); if ((mask & HAS_VALUE) != 0) { node.data = @in.ReadInt64(); } if ((mask & LO_KID) != 0) { var kid = new JaspellTernarySearchTrie.TSTNode('\0', node); node.relatives[JaspellTernarySearchTrie.TSTNode.LOKID] = kid; ReadRecursively(@in, kid); } if ((mask & EQ_KID) != 0) { var kid = new JaspellTernarySearchTrie.TSTNode('\0', node); node.relatives[JaspellTernarySearchTrie.TSTNode.EQKID] = kid; ReadRecursively(@in, kid); } if ((mask & HI_KID) != 0) { var kid = new JaspellTernarySearchTrie.TSTNode('\0', node); node.relatives[JaspellTernarySearchTrie.TSTNode.HIKID] = kid; ReadRecursively(@in, kid); } }
private void ReadRecursively(DataInput @in, JaspellTernarySearchTrie.TSTNode node) { node.splitchar = @in.ReadString().charAt(0); sbyte mask = @in.ReadByte(); if ((mask & HAS_VALUE) != 0) { node.data = Convert.ToInt64(@in.readLong()); } if ((mask & LO_KID) != 0) { JaspellTernarySearchTrie.TSTNode kid = new JaspellTernarySearchTrie.TSTNode(trie, '\0', node); node.relatives[JaspellTernarySearchTrie.TSTNode.LOKID] = kid; ReadRecursively(@in, kid); } if ((mask & EQ_KID) != 0) { JaspellTernarySearchTrie.TSTNode kid = new JaspellTernarySearchTrie.TSTNode(trie, '\0', node); node.relatives[JaspellTernarySearchTrie.TSTNode.EQKID] = kid; ReadRecursively(@in, kid); } if ((mask & HI_KID) != 0) { JaspellTernarySearchTrie.TSTNode kid = new JaspellTernarySearchTrie.TSTNode(trie, '\0', node); node.relatives[JaspellTernarySearchTrie.TSTNode.HIKID] = kid; ReadRecursively(@in, kid); } }
public override bool load(DataInput input) { count = input.ReadVLong(); JaspellTernarySearchTrie.TSTNode root = new JaspellTernarySearchTrie.TSTNode(trie, '\0', null); ReadRecursively(input, root); trie.Root = root; return(true); }
public override bool Store(DataOutput output) { output.WriteVInt64(count); JaspellTernarySearchTrie.TSTNode root = trie.Root; if (root == null) // empty tree { return(false); } WriteRecursively(output, root); return(true); }
private void ReadRecursively(DataInput @in, JaspellTernarySearchTrie.TSTNode node) { node.splitchar = @in.ReadString()[0]; sbyte mask = (sbyte)@in.ReadByte(); if ((mask & HAS_VALUE) != 0) { node.data = Convert.ToInt64(@in.ReadLong()); } if ((mask & LO_KID) != 0) { var kid = new JaspellTernarySearchTrie.TSTNode(trie, '\0', node); node.relatives[JaspellTernarySearchTrie.TSTNode.LOKID] = kid; ReadRecursively(@in, kid); } if ((mask & EQ_KID) != 0) { var kid = new JaspellTernarySearchTrie.TSTNode(trie, '\0', node); node.relatives[JaspellTernarySearchTrie.TSTNode.EQKID] = kid; ReadRecursively(@in, kid); } if ((mask & HI_KID) != 0) { var kid = new JaspellTernarySearchTrie.TSTNode(trie, '\0', node); node.relatives[JaspellTernarySearchTrie.TSTNode.HIKID] = kid; ReadRecursively(@in, kid); } }
public override bool Load(DataInput input) { count = input.ReadVLong(); var root = new JaspellTernarySearchTrie.TSTNode(trie, '\0', null); ReadRecursively(input, root); trie.Root = root; return true; }