internal static Block Parse(ref ReadOnlyMemory <byte> data) { var intRef = data; Block block = new Block(); block.Zero = ParsePrimitive <uint>(ref intRef); block.BlockId = ParsePrimitive <uint>(ref intRef); block.Unknown1 = ParsePrimitive <long>(ref intRef); block.Unknown2 = ParsePrimitive <long>(ref intRef); block.NumberOfRows = ParsePrimitive <byte>(ref intRef); block.NextRowId = ParsePrimitive <byte>(ref intRef); block.Unknown3 = ParsePrimitive <ushort>(ref intRef); block.RemainingBytes = ParsePrimitive <ushort>(ref intRef); block.DataSize = ParsePrimitive <ushort>(ref intRef); block.Unknown4 = ParsePrimitive <long>(ref intRef); var rowData = new RowHeader[block.NumberOfRows]; for (int i = 0; i < block.NumberOfRows; i++) { rowData[i] = RowHeader.Parse(intRef.Slice(ParsePrimitive <ushort>(data.Slice(4096 - 6 - i * 2)))); } data = data.Slice(4096); block.Rows = rowData; return(block); }
internal static Track FromRow(RekordboxLibrary library, Internal.RowHeader row) { var internalTrack = row.ParseColumnData <Internal.Track>(); return(new Track(row.ReadString(internalTrack.TrackName).ReadAsUtf8(), internalTrack.ArtistId, IOPath.Combine(IOPath.GetDirectoryName(library.Path), "../../", row.ReadString(internalTrack.DatFile).Slice(1).ReadAsUtf8()))); }
internal static RowHeader Parse(ReadOnlyMemory <byte> data) { var intRef = data; RowHeader row = default; row.TableId = ParsePrimitive <short>(ref intRef); row.RowIndex = ParsePrimitive <short>(ref intRef); row.RowData = intRef; return(row); }
internal static Artist FromRow(RekordboxLibrary library, Internal.RowHeader row) { var internalArtist = row.ParseColumnData <Internal.Artist>(); return(new Artist(internalArtist.ArtistId, row.ReadString(internalArtist.ArtistName).ReadAsUtf8())); }