This repository has been archived on 2025-05-24. You can view files and clone it, but cannot push or open issues or pull requests.
Files
RomVault/ROMVault2/RvDB/RvDat.cs
2014-09-23 12:06:15 -07:00

119 lines
3.1 KiB
C#

/******************************************************
* ROMVault2 is written by Gordon J. *
* Contact gordon@romvault.com *
* Copyright 2014 *
******************************************************/
using System;
using System.Collections.Generic;
using System.IO;
namespace ROMVault2.RvDB
{
public enum DatUpdateStatus
{
Delete,
Correct
}
public class RvDat
{
public int DatIndex = -1;
public DatUpdateStatus Status;
public long TimeStamp;
public bool AutoAddDirectory;
public enum DatData
{
DatName = 1,
DatFullName = 2,
RootDir = 3,
Description = 4,
Category = 5,
Version = 6,
Date = 7,
Author = 8,
Email = 9,
HomePage = 10,
URL = 11,
FileType = 12,
MergeType = 13,
SuperDat = 14,
DirSetup = 15
}
private class GameMetaData
{
public DatData Id { get; private set; }
public String Value { get; private set; }
public GameMetaData(DatData id, String value)
{
Id = id;
Value = value;
}
public GameMetaData(BinaryReader br)
{
Id = (DatData)br.ReadByte();
Value = br.ReadString();
}
public void Write(BinaryWriter bw)
{
bw.Write((byte)Id);
bw.Write(DB.Fn(Value));
}
}
private readonly List<GameMetaData> _gameMetaData = new List<GameMetaData>();
public void Write(BinaryWriter bw)
{
bw.Write(TimeStamp);
bw.Write(AutoAddDirectory);
bw.Write((byte)_gameMetaData.Count);
foreach (GameMetaData gameMD in _gameMetaData)
gameMD.Write(bw);
}
public void Read(BinaryReader br)
{
TimeStamp = br.ReadInt64();
AutoAddDirectory = br.ReadBoolean();
byte c = br.ReadByte();
_gameMetaData.Clear();
_gameMetaData.Capacity = c;
for (byte i = 0; i < c; i++)
_gameMetaData.Add(new GameMetaData(br));
}
public void AddData(DatData id, string val)
{
if (string.IsNullOrEmpty(val))
return;
int pos = 0;
while (pos < _gameMetaData.Count && _gameMetaData[pos].Id < id)
pos++;
_gameMetaData.Insert(pos, new GameMetaData(id, val));
}
public string GetData(DatData id)
{
foreach (GameMetaData gameMD in _gameMetaData)
{
if (id == gameMD.Id) return gameMD.Value;
if (id < gameMD.Id) return "";
}
return "";
}
}
}