ListTreeNodeExtensions.cs
4.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
using System.Collections.Generic;
namespace UniJSON
{
public static class ListTreeNodeExtensions
{
#region IValue
public static bool IsNull<T>(this ListTreeNode<T> self) where T : IListTreeItem, IValue<T>
{
return self.Value.ValueType == ValueNodeType.Null;
}
public static bool IsBoolean<T>(this ListTreeNode<T> self) where T : IListTreeItem, IValue<T>
{
return self.Value.ValueType == ValueNodeType.Boolean;
}
public static bool IsString<T>(this ListTreeNode<T> self) where T : IListTreeItem, IValue<T>
{
return self.Value.ValueType == ValueNodeType.String;
}
public static bool IsInteger<T>(this ListTreeNode<T> self) where T : IListTreeItem, IValue<T>
{
return self.Value.ValueType == ValueNodeType.Integer;
}
public static bool IsFloat<T>(this ListTreeNode<T> self) where T : IListTreeItem, IValue<T>
{
return self.Value.ValueType == ValueNodeType.Number
|| self.Value.ValueType == ValueNodeType.NaN
|| self.Value.ValueType == ValueNodeType.Infinity
|| self.Value.ValueType == ValueNodeType.MinusInfinity;
}
public static bool IsArray<T>(this ListTreeNode<T> self) where T : IListTreeItem, IValue<T>
{
return self.Value.ValueType == ValueNodeType.Array;
}
public static bool IsMap<T>(this ListTreeNode<T> self) where T : IListTreeItem, IValue<T>
{
return self.Value.ValueType == ValueNodeType.Object;
}
public static bool GetBoolean<T>(this ListTreeNode<T> self) where T : IListTreeItem, IValue<T> { return self.Value.GetBoolean(); }
public static string GetString<T>(this ListTreeNode<T> self) where T : IListTreeItem, IValue<T> { return self.Value.GetString(); }
public static Utf8String GetUtf8String<T>(this ListTreeNode<T> self) where T : IListTreeItem, IValue<T> { return self.Value.GetUtf8String(); }
public static sbyte GetSByte<T>(this ListTreeNode<T> self) where T : IListTreeItem, IValue<T> { return self.Value.GetSByte(); }
public static short GetInt16<T>(this ListTreeNode<T> self) where T : IListTreeItem, IValue<T> { return self.Value.GetInt16(); }
public static int GetInt32<T>(this ListTreeNode<T> self) where T : IListTreeItem, IValue<T> { return self.Value.GetInt32(); }
public static long GetInt64<T>(this ListTreeNode<T> self) where T : IListTreeItem, IValue<T> { return self.Value.GetInt64(); }
public static byte GetByte<T>(this ListTreeNode<T> self) where T : IListTreeItem, IValue<T> { return self.Value.GetByte(); }
public static ushort GetUInt16<T>(this ListTreeNode<T> self) where T : IListTreeItem, IValue<T> { return self.Value.GetUInt16(); }
public static uint GetUInt32<T>(this ListTreeNode<T> self) where T : IListTreeItem, IValue<T> { return self.Value.GetUInt32(); }
public static ulong GetUInt64<T>(this ListTreeNode<T> self) where T : IListTreeItem, IValue<T> { return self.Value.GetUInt64(); }
public static float GetSingle<T>(this ListTreeNode<T> self) where T : IListTreeItem, IValue<T> { return self.Value.GetSingle(); }
public static double GetDouble<T>(this ListTreeNode<T> self) where T : IListTreeItem, IValue<T> { return self.Value.GetDouble(); }
/// <summary>
/// for UnitTest. Use explicit GetT() or Deserialize(ref T)
/// </summary>
/// <returns></returns>
public static object GetValue<T>(this ListTreeNode<T> self) where T : IListTreeItem, IValue<T>
{
return self.Value.GetValue<object>();
}
#endregion
public static IEnumerable<ListTreeNode<T>> Traverse<T>(this ListTreeNode<T> self) where T : IListTreeItem, IValue<T>
{
yield return self;
if (self.IsArray())
{
foreach (var x in self.ArrayItems())
{
foreach (var y in x.Traverse())
{
yield return y;
}
}
}
else if (self.IsMap())
{
foreach (var kv in self.ObjectItems())
{
foreach (var y in kv.Value.Traverse())
{
yield return y;
}
}
}
}
}
}