private static LanguageNode unpackLanguageTree(LanguageNode my) { if (my.type == LanguageNodeType.BRANCH) { var newData = JsonConvert.DeserializeObject <Dictionary <string, LanguageNode> >(my.data.ToString()); var keys = new List <string>(newData.Keys); for (int i = 0; i < keys.Count; i++) { newData[keys[i]] = unpackLanguageTree(newData[keys[i]]); } my.data = newData; } else if (my.type == LanguageNodeType.DATA) { var newData = my.data.ToString(); my.data = newData; } return(my); }
private static string getString_I(string[] path, int depth, LanguageNode current) { var myPath = path[depth]; LanguageNode outH; var next = ((Dictionary <string, LanguageNode>)current.data).TryGetValue(myPath, out outH); if (next == false) { return(null); } if (outH.type == LanguageNodeType.DATA) { return((string)(outH.data)); } depth++; if (depth == path.Length) { return(null); } return(getString_I(path, depth, outH)); }
private static void addLanguageString_I(string[] path, int depth, string act, LanguageNode current) { var myPath = path[depth]; //Console.WriteLine(myPath); if (current.type == LanguageNodeType.DATA && depth != path.Length - 1) { throw new InvalidOperationException("The path for " + myPath + " is not a bramch"); } else if (current.type == LanguageNodeType.DATA && depth == path.Length - 1) { Console.WriteLine("OVERWRITE EXISTING VALUE."); } if (depth == path.Length - 1) { ((Dictionary <string, LanguageNode>)current.data)[myPath] = new LanguageNode() { type = LanguageNodeType.DATA, data = act }; return; } var cdt = (Dictionary <string, LanguageNode>)current.data; LanguageNode outH; var w = cdt.TryGetValue(myPath, out outH); if (w == false || outH == null) { outH = new LanguageNode() { data = new Dictionary <string, LanguageNode>(), type = LanguageNodeType.BRANCH }; cdt[myPath] = outH; } depth++; addLanguageString_I(path, depth, act, outH); }