public TAG_List(TAG[] payload, Byte tagId) : this() { TagId = new TAG_Byte(tagId); Length = new TAG_Int(payload.Length); Payload = payload; }
public TAG_List(TAG[] payload, Byte tagId, String name) : this(payload, tagId) { if (name != null && name.Length > 0) { Name = new TAG_String(name); IsNamed = true; } }
public TAG_Compound() { IsRoot = false; Parent = null; Payload = null; Type = TYPE.TAG_Compound; }
internal TAG_Compound(Stream data, TAG parent) : this() { Parent = parent; Read(data); }
public override bool TryGetValue(String key, out TAG value) { if (IsRoot && (!IsNamed || Name.Length.Payload == 0) && Payload.Count == 1) { var temp = Payload.GetEnumerator(); temp.MoveNext(); if (temp.Current.Value is TAG_Compound) { return temp.Current.Value.TryGetValue(key, out value); } } return Payload.TryGetValue(key, out value); }
public virtual bool TryGetValue(String key, out TAG value) { throw new NotImplementedException("Indexing only possible with TAG_Compound"); }
public override void Read(Stream data) { Payload = new Dictionary <String, TAG>(); while (true) { if (data.Position >= data.Length) { break; } TAG_Byte tagType = new TAG_Byte(data); if (tagType.Payload == (SByte)TYPE.TAG_End) { break; } TAG_String name = new TAG_String(data); TAG nextTag = null; switch ((TYPE)tagType.Payload) { case TYPE.TAG_Byte: nextTag = (TAG) new TAG_Byte(data); break; case TYPE.TAG_Short: nextTag = (TAG) new TAG_Short(data); break; case TYPE.TAG_Int: nextTag = (TAG) new TAG_Int(data); break; case TYPE.TAG_Long: nextTag = (TAG) new TAG_Long(data); break; case TYPE.TAG_Float: nextTag = (TAG) new TAG_Float(data); break; case TYPE.TAG_Double: nextTag = (TAG) new TAG_Double(data); break; case TYPE.TAG_Byte_Array: nextTag = (TAG) new TAG_Byte_Array(data); break; case TYPE.TAG_String: nextTag = (TAG) new TAG_String(data); break; case TYPE.TAG_List: nextTag = (TAG) new TAG_List(data); break; case TYPE.TAG_Compound: nextTag = (TAG) new TAG_Compound(data, this); break; case TYPE.TAG_Int_Array: nextTag = (TAG) new TAG_Int_Array(data); break; default: throw new Exception("Unrecognized tag type."); } nextTag.Name = name; nextTag.IsNamed = true; Payload.Add(name.PayloadString, nextTag); } }