Ejemplo n.º 1
0
 private bool Write(Node node)
 {
     switch (node.GetKind())
     {
     case Node.Kind.NULL:
         writer.WriteNull();
         return true;
     case Node.Kind.BOOLEAN:
         writer.WriteBool((bool)node);
         return true;
     case Node.Kind.INT:
         writer.WriteInt((int)node);
         return true;
     case Node.Kind.UINT:
         writer.WriteUInt((uint)node);
         return true;
     case Node.Kind.DOUBLE:
         writer.WriteNumber((double)node);
         return true;
     case Node.Kind.STRING:
         writer.WriteString((string)node);
         return true;
     case Node.Kind.ARRAY:
         {
             if (writed.ContainsKey(node))
                 return false;
             writed.Add(node, true);
             List<Node> list = (List<Node>)node;
             writer.WriteNewArray(list.Count);
             bool first = true;
             for (int i = 0, j = list.Count; i < j; ++i)
             {
                 if (first)
                 {
                     first = false;
                 }
                 else
                 {
                     writer.WriteComma();
                 }
                 writer.WriteIndent();
                 if (!Write(list[i]))
                     return false;
             }
             writer.WriteCloseArray(list.Count);
             return true;
         }
     case Node.Kind.TABLE:
         {
             if (writed.ContainsKey(node))
                 return false;
             writed.Add(node, true);
             Dictionary<string, Node> table = (Dictionary<string, Node>)node;
             writer.WriteNewTable(table.Count);
             bool first = true;
             foreach (KeyValuePair<string, Node> kv in table)
             {
                 if (first)
                 {
                     first = false;
                 }
                 else
                 {
                     writer.WriteComma();
                 }
                 writer.WriteIndent();
                 writer.WriteTableKey(kv.Key);
                 if (!Write(kv.Value))
                     return false;
             }
             writer.WriteCloseTable(table.Count);
             return true;
         }
     }
     return false;
 }