private DataNode ExpandDataNode(DataNode dataNode, string tagPath) { string[] pathParts = tagPath.Split('/'); DataNode curTag = dataNode; curTag.Expand(); foreach (var part in pathParts) { TagDataNode.Container container = curTag as TagDataNode.Container; if (curTag == null) { throw new Exception("Invalid tag path"); } DataNode childTag = null; foreach (var child in curTag.Nodes) { if (child.NodePathName == part) { childTag = child; } } if (childTag == null) { throw new Exception("Invalid tag path"); } curTag.Expand(); } return(curTag); }
internal static short[] GetShortArray(this TagDataNode.Container c, string name) => c.Get <TagShortArrayDataNode>(name).Tag.ToTagShortArray().Data;
internal static string GetString(this TagDataNode.Container c, string name) => c.Get <TagStringDataNode>(name).Tag.ToTagString().Data;
internal static int GetInt(this TagDataNode.Container c, string name) => c.Get <TagIntDataNode>(name).Tag.ToTagInt().Data;
internal static long[] GetLongArray(this TagDataNode.Container c, string name) => c.Get <TagLongArrayDataNode>(name).Tag.ToTagLongArray().Data;
internal static float GetFloat(this TagDataNode.Container c, string name) => c.Get <TagFloatDataNode>(name).Tag.ToTagFloat().Data;
internal static double GetDouble(this TagDataNode.Container c, string name) => c.Get <TagDoubleDataNode>(name).Tag.ToTagByte().Data;
internal static byte[] GetByteArray(this TagDataNode.Container c, string name) => c.Get <TagByteArrayDataNode>(name).Tag.ToTagByteArray().Data;
internal static sbyte[] GetSByteArray(this TagDataNode.Container c, string name) => c.Get <TagByteArrayDataNode>(name).Tag.ToTagByteArray().Data.Select(b => unchecked ((sbyte)b)).ToArray();
internal static sbyte GetSByte(this TagDataNode.Container c, string name) => (sbyte)c.Get <TagByteDataNode>(name).Tag.ToTagByte().Data;