public static WpcItemList Parse(ref ReadOnlySpanBuffer <byte> buf) { WpcItemList ret = new WpcItemList(); while (true) { if (WpcItem.Parse(ref buf, out string name, out ReadOnlyMemory <byte> data) == false) { break; } ret.Add(name, data); } return(ret); }
public static bool Parse(ref ReadOnlySpanBuffer <byte> buf, out string name, out ReadOnlyMemory <byte> data) { name = ""; data = default; var nameBuf = buf.Read(4, allowPartial: true); if (nameBuf.Length != 4) { return(false); } name = nameBuf._GetString_Ascii().ToUpperInvariant(); int i = name.IndexOf(' '); if (i != -1) { name = name.Substring(0, i); } var sizeStrBuf = buf.Read(10, allowPartial: true); if (sizeStrBuf.Length != 10) { return(false); } int size = sizeStrBuf._GetString_Ascii()._ToInt(); size = Math.Max(size, 0); if (size > Pack.MaxPackSize) { throw new CoresException($"size ({size}) > Pack.MaxPackSize ({Pack.MaxPackSize})"); } var dataBuf = buf.Read(size, allowPartial: true); if (dataBuf.Length != size) { return(false); } string dataStr = dataBuf._GetString_Ascii(); data = Str.Base64Decode(Str.Safe64ToBase64(dataStr)); return(true); }
public static WpcItemList Parse(string str) { ReadOnlySpanBuffer <byte> buf = str._GetBytes_Ascii(); return(Parse(ref buf)); }