Remove old SaveFsEntry file

This commit is contained in:
Alex Barney 2019-05-20 15:04:11 -05:00
parent f7b983ccb2
commit 5b764e487e
2 changed files with 22 additions and 120 deletions

View file

@ -1,37 +0,0 @@
using System;
using System.Runtime.InteropServices;
namespace LibHac.Fs.Save
{
internal ref struct SaveEntryKey
{
public ReadOnlySpan<byte> Name;
public int Parent;
public SaveEntryKey(ReadOnlySpan<byte> name, int parent)
{
Name = name;
Parent = parent;
}
}
[StructLayout(LayoutKind.Sequential, Pack = 1, Size = 0x14)]
public struct SaveFileInfo
{
public int StartBlock;
public long Length;
public long Reserved;
}
/// <summary>
/// Represents the current position when enumerating a directory's contents.
/// </summary>
[StructLayout(LayoutKind.Sequential, Pack = 1, Size = 0x14)]
public struct SaveFindPosition
{
/// <summary>The ID of the next directory to be enumerated.</summary>
public int NextDirectory;
/// <summary>The ID of the next file to be enumerated.</summary>
public int NextFile;
}
}

View file

@ -1,98 +1,37 @@
using System.Collections.Generic; using System;
using System.Diagnostics; using System.Runtime.InteropServices;
using System.IO;
using System.Text;
namespace LibHac.Fs.Save namespace LibHac.Fs.Save
{ {
[DebuggerDisplay("{" + nameof(FullPath) + "}")] internal ref struct SaveEntryKey
public abstract class SaveFsEntry
{ {
public int ParentDirIndex { get; protected set; } public ReadOnlySpan<byte> Name;
public string Name { get; protected set; } public int Parent;
public string FullPath { get; private set; } public SaveEntryKey(ReadOnlySpan<byte> name, int parent)
public SaveDirectoryEntry ParentDir { get; internal set; }
internal static void ResolveFilenames(IEnumerable<SaveFsEntry> entries)
{ {
var list = new List<string>(); Name = name;
var sb = new StringBuilder(); Parent = parent;
string delimiter = "/";
foreach (SaveFsEntry file in entries)
{
list.Add(file.Name);
SaveDirectoryEntry dir = file.ParentDir;
while (dir != null)
{
list.Add(delimiter);
list.Add(dir.Name);
dir = dir.ParentDir;
}
for (int i = list.Count - 1; i >= 0; i--)
{
sb.Append(list[i]);
}
file.FullPath = sb.Length == 0 ? delimiter : sb.ToString();
list.Clear();
sb.Clear();
}
}
}
public class SaveFileEntry : SaveFsEntry
{
public int NextSiblingIndex { get; }
public int BlockIndex { get; }
public long FileSize { get; }
public long Field54 { get; }
public int NextInChainIndex { get; }
public SaveFileEntry NextSibling { get; internal set; }
public SaveFileEntry NextInChain { get; internal set; }
public SaveFileEntry(BinaryReader reader)
{
long start = reader.BaseStream.Position;
ParentDirIndex = reader.ReadInt32();
Name = reader.ReadUtf8Z(0x40);
reader.BaseStream.Position = start + 0x44;
NextSiblingIndex = reader.ReadInt32();
BlockIndex = reader.ReadInt32();
FileSize = reader.ReadInt64();
Field54 = reader.ReadInt64();
NextInChainIndex = reader.ReadInt32();
} }
} }
public class SaveDirectoryEntry : SaveFsEntry [StructLayout(LayoutKind.Sequential, Pack = 1, Size = 0x14)]
public struct SaveFileInfo
{ {
public int NextSiblingIndex { get; } public int StartBlock;
public int FirstChildIndex { get; } public long Length;
public long FirstFileIndex { get; } public long Reserved;
public long Field54 { get; }
public int NextInChainIndex { get; }
public SaveDirectoryEntry NextSibling { get; internal set; }
public SaveDirectoryEntry FirstChild { get; internal set; }
public SaveFileEntry FirstFile { get; internal set; }
public SaveDirectoryEntry NextInChain { get; internal set; }
public SaveDirectoryEntry(BinaryReader reader)
{
long start = reader.BaseStream.Position;
ParentDirIndex = reader.ReadInt32();
Name = reader.ReadUtf8Z(0x40);
reader.BaseStream.Position = start + 0x44;
NextSiblingIndex = reader.ReadInt32();
FirstChildIndex = reader.ReadInt32();
FirstFileIndex = reader.ReadInt64();
Field54 = reader.ReadInt64();
NextInChainIndex = reader.ReadInt32();
} }
/// <summary>
/// Represents the current position when enumerating a directory's contents.
/// </summary>
[StructLayout(LayoutKind.Sequential, Pack = 1, Size = 0x14)]
public struct SaveFindPosition
{
/// <summary>The ID of the next directory to be enumerated.</summary>
public int NextDirectory;
/// <summary>The ID of the next file to be enumerated.</summary>
public int NextFile;
} }
} }