Пример #1
0
 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);
 }
Пример #2
0
        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));
        }
Пример #3
0
        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);
        }