some random code cleanup on BizHawk.Common
This commit is contained in:
parent
d67ff542ba
commit
030f30628d
|
@ -59,15 +59,26 @@ namespace BizHawk.Common
|
|||
|
||||
public void Dispose()
|
||||
{
|
||||
if (arr != null)
|
||||
hnd.Free();
|
||||
arr = null;
|
||||
Dispose(true);
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
~CBuffer() { Dispose(); }
|
||||
protected virtual void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing)
|
||||
{
|
||||
if (arr != null)
|
||||
{
|
||||
hnd.Free();
|
||||
}
|
||||
arr = null;
|
||||
}
|
||||
}
|
||||
|
||||
~CBuffer() { Dispose(true); }
|
||||
}
|
||||
|
||||
public class ByteBuffer : CBuffer<byte>
|
||||
public sealed class ByteBuffer : CBuffer<byte>
|
||||
{
|
||||
public ByteBuffer(int amt) : base(amt,1) { }
|
||||
public ByteBuffer(byte[] arr) : base(arr,1) { }
|
||||
|
@ -83,7 +94,7 @@ namespace BizHawk.Common
|
|||
}
|
||||
}
|
||||
|
||||
public class IntBuffer : CBuffer<int>
|
||||
public sealed class IntBuffer : CBuffer<int>
|
||||
{
|
||||
public IntBuffer(int amt) : base(amt, 4) { }
|
||||
public IntBuffer(int[] arr) : base(arr,4) { }
|
||||
|
@ -99,7 +110,7 @@ namespace BizHawk.Common
|
|||
}
|
||||
}
|
||||
|
||||
public class ShortBuffer : CBuffer<short>
|
||||
public sealed class ShortBuffer : CBuffer<short>
|
||||
{
|
||||
public ShortBuffer(int amt) : base(amt, 2) { }
|
||||
public ShortBuffer(short[] arr) : base(arr, 2) { }
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
using System;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
|
@ -21,7 +22,7 @@ namespace BizHawk.Common
|
|||
{
|
||||
int min = 0;
|
||||
int max = list.Count;
|
||||
int mid = 0;
|
||||
int mid;
|
||||
TKey midKey;
|
||||
while (min < max)
|
||||
{
|
||||
|
@ -65,22 +66,22 @@ namespace BizHawk.Common
|
|||
|
||||
public static string ToHexString(this int n, int numdigits)
|
||||
{
|
||||
return string.Format("{0:X" + numdigits + "}", n);
|
||||
return String.Format("{0:X" + numdigits + "}", n);
|
||||
}
|
||||
|
||||
public static string ToHexString(this uint n, int numdigits)
|
||||
{
|
||||
return string.Format("{0:X" + numdigits + "}", n);
|
||||
return String.Format("{0:X" + numdigits + "}", n);
|
||||
}
|
||||
|
||||
public static string ToHexString(this byte n, int numdigits)
|
||||
{
|
||||
return string.Format("{0:X" + numdigits + "}", n);
|
||||
return String.Format("{0:X" + numdigits + "}", n);
|
||||
}
|
||||
|
||||
public static string ToHexString(this ushort n, int numdigits)
|
||||
{
|
||||
return string.Format("{0:X" + numdigits + "}", n);
|
||||
return String.Format("{0:X" + numdigits + "}", n);
|
||||
}
|
||||
|
||||
//http://stackoverflow.com/questions/1766328/can-linq-use-binary-search-when-the-collection-is-ordered
|
||||
|
@ -151,14 +152,7 @@ namespace BizHawk.Common
|
|||
|
||||
public static bool IsBinary(this string str)
|
||||
{
|
||||
for (int i = 0; i < str.Length; i++)
|
||||
{
|
||||
char c = str[i];
|
||||
if (c == '0' || c == '1')
|
||||
continue;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
return str.All(c => c == '0' || c == '1');
|
||||
}
|
||||
|
||||
public static bool Bit(this byte b, int index)
|
||||
|
@ -179,84 +173,59 @@ namespace BizHawk.Common
|
|||
public static string GetPrecedingString(this string str, string value)
|
||||
{
|
||||
int index = str.IndexOf(value);
|
||||
|
||||
if (index < 0)
|
||||
{
|
||||
return null;
|
||||
if (index == 0)
|
||||
return "";
|
||||
return str.Substring(0, index);
|
||||
}
|
||||
else if (index == 0)
|
||||
{
|
||||
return String.Empty;
|
||||
}
|
||||
else
|
||||
{
|
||||
return str.Substring(0, index);
|
||||
}
|
||||
}
|
||||
|
||||
public static bool In(this string str, params string[] options)
|
||||
{
|
||||
foreach (string opt in options)
|
||||
{
|
||||
if (opt.Equals(str, StringComparison.CurrentCultureIgnoreCase)) return true;
|
||||
}
|
||||
return false;
|
||||
return options.Any(opt => opt.Equals(str, StringComparison.CurrentCultureIgnoreCase));
|
||||
}
|
||||
|
||||
public static bool In(this string str, IEnumerable<string> options)
|
||||
{
|
||||
foreach (string opt in options)
|
||||
{
|
||||
if (opt.Equals(str, StringComparison.CurrentCultureIgnoreCase)) return true;
|
||||
}
|
||||
return false;
|
||||
return options.Any(opt => opt.Equals(str, StringComparison.CurrentCultureIgnoreCase));
|
||||
}
|
||||
|
||||
public static bool In<T>(this string str, IEnumerable<T> options, Func<T, string, bool> eval)
|
||||
{
|
||||
foreach (T opt in options)
|
||||
{
|
||||
if (eval(opt, str))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
return options.Any(opt => eval(opt, str));
|
||||
}
|
||||
|
||||
public static bool NotIn(this string str, params string[] options)
|
||||
{
|
||||
foreach (string opt in options)
|
||||
{
|
||||
if (opt.ToLower() == str.ToLower()) return false;
|
||||
}
|
||||
return true;
|
||||
return options.All(opt => opt.ToLower() != str.ToLower());
|
||||
}
|
||||
|
||||
public static bool NotIn(this string str, IEnumerable<string> options)
|
||||
{
|
||||
foreach (string opt in options)
|
||||
{
|
||||
if (opt.ToLower() == str.ToLower()) return false;
|
||||
}
|
||||
return true;
|
||||
return options.All(opt => opt.ToLower() != str.ToLower());
|
||||
}
|
||||
|
||||
public static bool In(this int i, params int[] options)
|
||||
{
|
||||
foreach (int j in options)
|
||||
{
|
||||
if (i == j) return true;
|
||||
}
|
||||
return false;
|
||||
return options.Any(j => i == j);
|
||||
}
|
||||
|
||||
public static bool In(this int i, IEnumerable<int> options)
|
||||
{
|
||||
foreach (int j in options)
|
||||
{
|
||||
if (i == j) return true;
|
||||
}
|
||||
return false;
|
||||
return options.Any(j => i == j);
|
||||
}
|
||||
|
||||
public static bool ContainsStartsWith(this IEnumerable<string> options, string str)
|
||||
{
|
||||
foreach (string opt in options)
|
||||
{
|
||||
if (opt.StartsWith(str)) return true;
|
||||
}
|
||||
return false;
|
||||
return options.Any(opt => opt.StartsWith(str));
|
||||
}
|
||||
|
||||
public static string GetOptionValue(this IEnumerable<string> options, string str)
|
||||
|
@ -278,11 +247,7 @@ namespace BizHawk.Common
|
|||
public static bool IsValidRomExtentsion(this string str, params string[] romExtensions)
|
||||
{
|
||||
string strUpper = str.ToUpper();
|
||||
foreach (string ext in romExtensions)
|
||||
{
|
||||
if (strUpper.EndsWith(ext.ToUpper())) return true;
|
||||
}
|
||||
return false;
|
||||
return romExtensions.Any(ext => strUpper.EndsWith(ext.ToUpper()));
|
||||
}
|
||||
|
||||
public static string ToCommaSeparated(this List<string> list)
|
||||
|
@ -298,9 +263,9 @@ namespace BizHawk.Common
|
|||
|
||||
public static void SaveAsHex(this byte[] buffer, TextWriter writer)
|
||||
{
|
||||
for (int i = 0; i < buffer.Length; i++)
|
||||
foreach (byte b in buffer)
|
||||
{
|
||||
writer.Write("{0:X2}", buffer[i]);
|
||||
writer.Write("{0:X2}", b);
|
||||
}
|
||||
writer.WriteLine();
|
||||
}
|
||||
|
@ -332,69 +297,79 @@ namespace BizHawk.Common
|
|||
|
||||
public static void SaveAsHex(this short[] buffer, TextWriter writer)
|
||||
{
|
||||
for (int i = 0; i < buffer.Length; i++)
|
||||
foreach (short b in buffer)
|
||||
{
|
||||
writer.Write("{0:X4}", buffer[i]);
|
||||
writer.Write("{0:X4}", b);
|
||||
}
|
||||
writer.WriteLine();
|
||||
}
|
||||
|
||||
public static void SaveAsHex(this ushort[] buffer, TextWriter writer)
|
||||
{
|
||||
for (int i = 0; i < buffer.Length; i++)
|
||||
foreach (ushort b in buffer)
|
||||
{
|
||||
writer.Write("{0:X4}", buffer[i]);
|
||||
writer.Write("{0:X4}", b);
|
||||
}
|
||||
writer.WriteLine();
|
||||
}
|
||||
|
||||
public static void SaveAsHex(this int[] buffer, TextWriter writer)
|
||||
{
|
||||
for (int i = 0; i < buffer.Length; i++)
|
||||
foreach (int b in buffer)
|
||||
{
|
||||
writer.Write("{0:X8}", buffer[i]);
|
||||
writer.Write("{0:X8}", b);
|
||||
}
|
||||
writer.WriteLine();
|
||||
}
|
||||
|
||||
public static void SaveAsHex(this uint[] buffer, TextWriter writer)
|
||||
{
|
||||
for (int i = 0; i < buffer.Length; i++)
|
||||
foreach (uint b in buffer)
|
||||
{
|
||||
writer.Write("{0:X8}", buffer[i]);
|
||||
writer.Write("{0:X8}", b);
|
||||
}
|
||||
writer.WriteLine();
|
||||
}
|
||||
|
||||
public static void Write(this BinaryWriter bw, int[] buffer)
|
||||
{
|
||||
for (int i = 0; i < buffer.Length; i++)
|
||||
bw.Write(buffer[i]);
|
||||
foreach (int b in buffer)
|
||||
{
|
||||
bw.Write(b);
|
||||
}
|
||||
}
|
||||
|
||||
public static void Write(this BinaryWriter bw, uint[] buffer)
|
||||
{
|
||||
for (int i = 0; i < buffer.Length; i++)
|
||||
bw.Write(buffer[i]);
|
||||
foreach (uint b in buffer)
|
||||
{
|
||||
bw.Write(b);
|
||||
}
|
||||
}
|
||||
|
||||
public static void Write(this BinaryWriter bw, short[] buffer)
|
||||
{
|
||||
for (int i = 0; i < buffer.Length; i++)
|
||||
bw.Write(buffer[i]);
|
||||
foreach (short b in buffer)
|
||||
{
|
||||
bw.Write(b);
|
||||
}
|
||||
}
|
||||
|
||||
public static void Write(this BinaryWriter bw, ushort[] buffer)
|
||||
{
|
||||
for (int i = 0; i < buffer.Length; i++)
|
||||
bw.Write(buffer[i]);
|
||||
foreach (ushort t in buffer)
|
||||
{
|
||||
bw.Write(t);
|
||||
}
|
||||
}
|
||||
|
||||
public static int[] ReadInt32s(this BinaryReader br, int num)
|
||||
{
|
||||
int[] ret = new int[num];
|
||||
for (int i = 0; i < num; i++)
|
||||
{
|
||||
ret[i] = br.ReadInt32();
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -402,7 +377,9 @@ namespace BizHawk.Common
|
|||
{
|
||||
short[] ret = new short[num];
|
||||
for (int i = 0; i < num; i++)
|
||||
{
|
||||
ret[i] = br.ReadInt16();
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -410,14 +387,19 @@ namespace BizHawk.Common
|
|||
{
|
||||
ushort[] ret = new ushort[num];
|
||||
for (int i = 0; i < num; i++)
|
||||
{
|
||||
ret[i] = br.ReadUInt16();
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
public static void ReadFromHex(this byte[] buffer, string hex)
|
||||
{
|
||||
if (hex.Length % 2 != 0)
|
||||
if (hex.Length%2 != 0)
|
||||
{
|
||||
throw new Exception("Hex value string does not appear to be properly formatted.");
|
||||
}
|
||||
|
||||
for (int i = 0; i < buffer.Length && i * 2 < hex.Length; i++)
|
||||
{
|
||||
string bytehex = "" + hex[i * 2] + hex[i * 2 + 1];
|
||||
|
@ -428,29 +410,25 @@ namespace BizHawk.Common
|
|||
private static int Hex2Int(char c)
|
||||
{
|
||||
if (c <= '9')
|
||||
{
|
||||
return c - '0';
|
||||
}
|
||||
else if (c <= 'F')
|
||||
{
|
||||
return c - '7';
|
||||
}
|
||||
else
|
||||
{
|
||||
return c - 'W';
|
||||
}
|
||||
}
|
||||
|
||||
public static void ReadFromHexFast(this byte[] buffer, string hex)
|
||||
{
|
||||
//if (hex.Length % 2 != 0)
|
||||
// throw new Exception("Hex value string does not appear to be properly formatted.");
|
||||
for (int i = 0; i < buffer.Length && i * 2 < hex.Length; i++)
|
||||
{
|
||||
buffer[i] = (byte)(Hex2Int(hex[i * 2]) * 16 + Hex2Int(hex[i * 2 + 1]));
|
||||
}
|
||||
/*
|
||||
var b = new byte[buffer.Length];
|
||||
b.ReadFromHex(hex);
|
||||
for (int i = 0; i < buffer.Length; i++)
|
||||
{
|
||||
if (b[i] != buffer[i])
|
||||
throw new Exception();
|
||||
}*/
|
||||
}
|
||||
|
||||
public static void ReadFromHex(this short[] buffer, string hex)
|
||||
|
@ -487,12 +465,6 @@ namespace BizHawk.Common
|
|||
}
|
||||
}
|
||||
|
||||
//public static void SaveAsHex(this uint[] buffer, BinaryWriter bw)
|
||||
//{
|
||||
// for (int i = 0; i < buffer.Length; i++)
|
||||
// bw.Write(buffer[i]);
|
||||
//}
|
||||
|
||||
//these don't work??? they dont get chosen by compiler
|
||||
public static void WriteBit(this BinaryWriter bw, Bit bit) { bw.Write((bool)bit); }
|
||||
public static Bit ReadBit(this BinaryReader br) { return br.ReadBoolean(); }
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
using System;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace BizHawk.Common
|
||||
|
@ -6,8 +5,13 @@ namespace BizHawk.Common
|
|||
//I think this is a little faster with uint than with byte
|
||||
public struct Bit
|
||||
{
|
||||
Bit(uint val) { this.val = val; }
|
||||
uint val;
|
||||
readonly uint val;
|
||||
|
||||
Bit(uint val)
|
||||
{
|
||||
this.val = val;
|
||||
}
|
||||
|
||||
public static implicit operator Bit(int rhs) { Debug.Assert((rhs & ~1) == 0); return new Bit((uint)(rhs)); }
|
||||
public static implicit operator Bit(uint rhs) { Debug.Assert((rhs & ~1) == 0); return new Bit((uint)(rhs)); }
|
||||
public static implicit operator Bit(byte rhs) { Debug.Assert((rhs & ~1) == 0); return new Bit((uint)(rhs)); }
|
||||
|
@ -17,10 +21,7 @@ namespace BizHawk.Common
|
|||
public static implicit operator uint(Bit rhs) { return (uint)rhs.val; }
|
||||
public static implicit operator byte(Bit rhs) { return (byte)rhs.val; }
|
||||
public static implicit operator bool(Bit rhs) { return rhs.val != 0; }
|
||||
public override string ToString()
|
||||
{
|
||||
return val.ToString();
|
||||
}
|
||||
public override string ToString() {return val.ToString(); }
|
||||
public static bool operator ==(Bit lhs, Bit rhs) { return lhs.val == rhs.val; }
|
||||
public static bool operator !=(Bit lhs, Bit rhs) { return lhs.val != rhs.val; }
|
||||
public override int GetHashCode() { return val.GetHashCode(); }
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
using System;
|
||||
using System.Linq;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace BizHawk.Common
|
||||
{
|
||||
|
@ -42,7 +43,7 @@ namespace BizHawk.Common
|
|||
using (var md5 = System.Security.Cryptography.MD5.Create())
|
||||
{
|
||||
md5.TransformFinalBlock(data, offset, len);
|
||||
return Util.BytesToHexString(md5.Hash);
|
||||
return BytesToHexString(md5.Hash);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -51,7 +52,7 @@ namespace BizHawk.Common
|
|||
using (var sha1 = System.Security.Cryptography.SHA1.Create())
|
||||
{
|
||||
sha1.TransformFinalBlock(data, offset, len);
|
||||
return Util.BytesToHexString(sha1.Hash);
|
||||
return BytesToHexString(sha1.Hash);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -76,16 +77,16 @@ namespace BizHawk.Common
|
|||
byte[] read = new byte[bytes];
|
||||
for (int b = 0; b < bytes; b++)
|
||||
read[b] = r.ReadByte();
|
||||
return System.Text.Encoding.UTF8.GetString(read);
|
||||
return Encoding.UTF8.GetString(read);
|
||||
}
|
||||
|
||||
public static string ReadStringAsciiZ(this BinaryReader r)
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for(;;)
|
||||
for (; ; )
|
||||
{
|
||||
int b = r.ReadByte();
|
||||
if(b <= 0) break;
|
||||
if (b <= 0) break;
|
||||
sb.Append((char)b);
|
||||
}
|
||||
return sb.ToString();
|
||||
|
@ -285,19 +286,19 @@ namespace BizHawk.Common
|
|||
return outStream.ToArray();
|
||||
}
|
||||
|
||||
public static byte BinToBCD(this byte v)
|
||||
{
|
||||
return (byte) (((v / 10) * 16) + (v % 10));
|
||||
}
|
||||
public static byte BinToBCD(this byte v)
|
||||
{
|
||||
return (byte)(((v / 10) * 16) + (v % 10));
|
||||
}
|
||||
|
||||
public static byte BCDtoBin(this byte v)
|
||||
{
|
||||
return (byte) (((v / 16) * 10) + (v % 16));
|
||||
}
|
||||
public static byte BCDtoBin(this byte v)
|
||||
{
|
||||
return (byte)(((v / 16) * 10) + (v % 16));
|
||||
}
|
||||
|
||||
public static string FormatFileSize(long filesize)
|
||||
{
|
||||
Decimal size = (Decimal)filesize;
|
||||
Decimal size = filesize;
|
||||
|
||||
Decimal OneKiloByte = 1024M;
|
||||
Decimal OneMegaByte = OneKiloByte * 1024M;
|
||||
|
@ -351,9 +352,10 @@ namespace BizHawk.Common
|
|||
public void StartWrite(BinaryWriter _bw) { bw = _bw; isReader = false; }
|
||||
public void StartRead(BinaryReader _br) { br = _br; isReader = true; }
|
||||
public void StartWrite(TextWriter _tw) { tw = _tw; isReader = false; isText = true; }
|
||||
public void StartRead(TextReader _tr) {
|
||||
public void StartRead(TextReader _tr)
|
||||
{
|
||||
tr = _tr;
|
||||
isReader = true;
|
||||
isReader = true;
|
||||
isText = true;
|
||||
BeginTextBlock();
|
||||
}
|
||||
|
@ -368,12 +370,12 @@ namespace BizHawk.Common
|
|||
|
||||
class Section : Dictionary<string, Section>
|
||||
{
|
||||
public string Name;
|
||||
public string Name = String.Empty;
|
||||
public readonly Dictionary<string, string> Items = new Dictionary<string, string>();
|
||||
}
|
||||
|
||||
Section ReaderSection, CurrSection;
|
||||
Stack<Section> SectionStack = new Stack<Section>();
|
||||
private Section ReaderSection, CurrSection;
|
||||
private readonly Stack<Section> SectionStack = new Stack<Section>();
|
||||
|
||||
void BeginTextBlock()
|
||||
{
|
||||
|
@ -381,13 +383,12 @@ namespace BizHawk.Common
|
|||
if (IsWriter) return;
|
||||
|
||||
ReaderSection = new Section();
|
||||
ReaderSection.Name = "";
|
||||
Stack<Section> ss = new Stack<Section>();
|
||||
ss.Push(ReaderSection);
|
||||
Section curs = ReaderSection;
|
||||
|
||||
var rxEnd = new System.Text.RegularExpressions.Regex(@"\[/(.*?)\]",System.Text.RegularExpressions.RegexOptions.Compiled);
|
||||
var rxBegin = new System.Text.RegularExpressions.Regex(@"\[(.*?)\]",System.Text.RegularExpressions.RegexOptions.Compiled);
|
||||
var rxEnd = new System.Text.RegularExpressions.Regex(@"\[/(.*?)\]", System.Text.RegularExpressions.RegexOptions.Compiled);
|
||||
var rxBegin = new System.Text.RegularExpressions.Regex(@"\[(.*?)\]", System.Text.RegularExpressions.RegexOptions.Compiled);
|
||||
|
||||
//read the entire file into a data structure for flexi-parsing
|
||||
string str;
|
||||
|
@ -411,12 +412,15 @@ namespace BizHawk.Common
|
|||
{
|
||||
string name = begin.Groups[1].Value;
|
||||
ss.Push(curs);
|
||||
var news = new Section();
|
||||
news.Name = name;
|
||||
var news = new Section {Name = name};
|
||||
if (!curs.ContainsKey(name))
|
||||
{
|
||||
curs[name] = news;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Exception(string.Format("Duplicate key \"{0}\" in serializer savestate!", name));
|
||||
}
|
||||
curs = news;
|
||||
}
|
||||
else
|
||||
|
@ -439,9 +443,9 @@ namespace BizHawk.Common
|
|||
public void BeginSection(string name)
|
||||
{
|
||||
sections.Push(name);
|
||||
if (IsText)
|
||||
if (IsText)
|
||||
if (IsWriter) { tw.WriteLine("[{0}]", name); }
|
||||
else
|
||||
else
|
||||
{
|
||||
SectionStack.Push(CurrSection);
|
||||
CurrSection = CurrSection[name];
|
||||
|
@ -452,11 +456,16 @@ namespace BizHawk.Common
|
|||
{
|
||||
string name = sections.Pop();
|
||||
if (IsText)
|
||||
if (IsWriter) tw.WriteLine("[/{0}]", name);
|
||||
{
|
||||
if (IsWriter)
|
||||
{
|
||||
tw.WriteLine("[/{0}]", name);
|
||||
}
|
||||
else
|
||||
{
|
||||
CurrSection = SectionStack.Pop();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
string Item(string key)
|
||||
|
@ -471,11 +480,22 @@ namespace BizHawk.Common
|
|||
|
||||
public void SyncEnum<T>(string name, ref T val) where T : struct
|
||||
{
|
||||
if (typeof(T).BaseType != typeof(System.Enum))
|
||||
if (typeof (T).BaseType != typeof (Enum))
|
||||
{
|
||||
throw new InvalidOperationException();
|
||||
if (isText) SyncEnumText<T>(name, ref val);
|
||||
else if (IsReader) val = (T)Enum.ToObject(typeof(T), br.ReadInt32());
|
||||
else bw.Write(Convert.ToInt32(val));
|
||||
}
|
||||
else if (isText)
|
||||
{
|
||||
SyncEnumText(name, ref val);
|
||||
}
|
||||
else if (IsReader)
|
||||
{
|
||||
val = (T) Enum.ToObject(typeof (T), br.ReadInt32());
|
||||
}
|
||||
else
|
||||
{
|
||||
bw.Write(Convert.ToInt32(val));
|
||||
}
|
||||
}
|
||||
|
||||
public void SyncEnumText<T>(string name, ref T val) where T : struct
|
||||
|
@ -522,13 +542,12 @@ namespace BizHawk.Common
|
|||
{
|
||||
if (IsReader)
|
||||
{
|
||||
if(Present(name)) val = Util.HexStringToBytes(Item(name));
|
||||
if (Present(name)) val = Util.HexStringToBytes(Item(name));
|
||||
if (val != null && val.Length == 0 && use_null) val = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
byte[] temp = val;
|
||||
if (temp == null) temp = new byte[0];
|
||||
byte[] temp = val ?? new byte[0];
|
||||
tw.WriteLine("{0} {1}", name, Util.BytesToHexString(temp));
|
||||
}
|
||||
}
|
||||
|
@ -556,8 +575,7 @@ namespace BizHawk.Common
|
|||
}
|
||||
else
|
||||
{
|
||||
short[] temp = val;
|
||||
if (temp == null) temp = new short[0];
|
||||
short[] temp = val ?? new short[0];
|
||||
tw.WriteLine("{0} {1}", name, Util.BytesToHexString(Util.ShortBufferToByteBuffer(temp)));
|
||||
}
|
||||
}
|
||||
|
@ -585,8 +603,7 @@ namespace BizHawk.Common
|
|||
}
|
||||
else
|
||||
{
|
||||
int[] temp = val;
|
||||
if (temp == null) temp = new int[0];
|
||||
int[] temp = val ?? new int[0];
|
||||
tw.WriteLine("{0} {1}", name, Util.BytesToHexString(Util.IntBufferToByteBuffer(temp)));
|
||||
}
|
||||
}
|
||||
|
@ -605,7 +622,7 @@ namespace BizHawk.Common
|
|||
{
|
||||
if (IsReader)
|
||||
{
|
||||
if(Present(name))
|
||||
if (Present(name))
|
||||
{
|
||||
byte[] bytes = Util.HexStringToBytes(Item(name));
|
||||
val = Util.ByteBufferToUintBuffer(bytes);
|
||||
|
@ -614,8 +631,7 @@ namespace BizHawk.Common
|
|||
}
|
||||
else
|
||||
{
|
||||
uint[] temp = val;
|
||||
if (temp == null) temp = new uint[0];
|
||||
uint[] temp = val ?? new uint[0];
|
||||
tw.WriteLine("{0} {1}", name, Util.BytesToHexString(Util.UintBufferToByteBuffer(temp)));
|
||||
}
|
||||
}
|
||||
|
@ -626,88 +642,104 @@ namespace BizHawk.Common
|
|||
else if (IsReader) Read(ref val);
|
||||
else Write(ref val);
|
||||
}
|
||||
|
||||
public void SyncText(string name, ref Bit val)
|
||||
{
|
||||
if (IsReader) ReadText(name, ref val);
|
||||
else WriteText(name, ref val);
|
||||
}
|
||||
|
||||
public void Sync(string name, ref byte val)
|
||||
{
|
||||
if (IsText) SyncText(name, ref val);
|
||||
else if (IsReader) Read(ref val);
|
||||
else Write(ref val);
|
||||
}
|
||||
void SyncText(string name, ref byte val)
|
||||
|
||||
private void SyncText(string name, ref byte val)
|
||||
{
|
||||
if (IsReader) ReadText(name, ref val);
|
||||
else WriteText(name, ref val);
|
||||
}
|
||||
|
||||
public void Sync(string name, ref ushort val)
|
||||
{
|
||||
if (IsText) SyncText(name, ref val);
|
||||
else if (IsReader) Read(ref val);
|
||||
else Write(ref val);
|
||||
}
|
||||
void SyncText(string name, ref ushort val)
|
||||
|
||||
private void SyncText(string name, ref ushort val)
|
||||
{
|
||||
if (IsReader) ReadText(name, ref val);
|
||||
else WriteText(name, ref val);
|
||||
}
|
||||
|
||||
public void Sync(string name, ref uint val)
|
||||
{
|
||||
if (IsText) SyncText(name, ref val);
|
||||
else if (IsReader) Read(ref val);
|
||||
else Write(ref val);
|
||||
}
|
||||
void SyncText(string name, ref uint val)
|
||||
|
||||
private void SyncText(string name, ref uint val)
|
||||
{
|
||||
if (IsReader) ReadText(name, ref val);
|
||||
else WriteText(name, ref val);
|
||||
}
|
||||
|
||||
public void Sync(string name, ref sbyte val)
|
||||
{
|
||||
if (IsText) SyncText(name, ref val);
|
||||
else if (IsReader) Read(ref val);
|
||||
else Write(ref val);
|
||||
}
|
||||
void SyncText(string name, ref sbyte val)
|
||||
|
||||
private void SyncText(string name, ref sbyte val)
|
||||
{
|
||||
if (IsReader) ReadText(name, ref val);
|
||||
else WriteText(name, ref val);
|
||||
}
|
||||
|
||||
public void Sync(string name, ref short val)
|
||||
{
|
||||
if (IsText) SyncText(name, ref val);
|
||||
else if (IsReader) Read(ref val);
|
||||
else Write(ref val);
|
||||
}
|
||||
void SyncText(string name, ref short val)
|
||||
|
||||
private void SyncText(string name, ref short val)
|
||||
{
|
||||
if (IsReader) ReadText(name, ref val);
|
||||
else WriteText(name, ref val);
|
||||
}
|
||||
|
||||
public void Sync(string name, ref int val)
|
||||
{
|
||||
if (IsText) SyncText(name, ref val);
|
||||
else if (IsReader) Read(ref val);
|
||||
else Write(ref val);
|
||||
}
|
||||
void SyncText(string name, ref int val)
|
||||
|
||||
private void SyncText(string name, ref int val)
|
||||
{
|
||||
if (IsReader) ReadText(name, ref val);
|
||||
else WriteText(name, ref val);
|
||||
}
|
||||
|
||||
public void Sync(string name, ref bool val)
|
||||
{
|
||||
if (IsText) SyncText(name, ref val);
|
||||
else if (IsReader) Read(ref val);
|
||||
else Write(ref val);
|
||||
}
|
||||
void SyncText(string name, ref bool val)
|
||||
|
||||
private void SyncText(string name, ref bool val)
|
||||
{
|
||||
if (IsReader) ReadText(name, ref val);
|
||||
else WriteText(name, ref val);
|
||||
}
|
||||
|
||||
public void SyncFixedString(string name, ref string val, int length)
|
||||
{
|
||||
//TODO - this could be made more efficient perhaps just by writing values right out of the string..
|
||||
|
@ -748,59 +780,59 @@ namespace BizHawk.Common
|
|||
}
|
||||
}
|
||||
|
||||
void Read(ref Bit val) { val = br.ReadBit(); }
|
||||
void Write(ref Bit val) { bw.WriteBit(val); }
|
||||
void ReadText(string name, ref Bit val) { if(Present(name)) val = (Bit)int.Parse(Item(name)); }
|
||||
void WriteText(string name, ref Bit val) { tw.WriteLine("{0} {1}", name, (int)val); }
|
||||
private void Read(ref Bit val) { val = br.ReadBit(); }
|
||||
private void Write(ref Bit val) { bw.WriteBit(val); }
|
||||
private void ReadText(string name, ref Bit val) { if (Present(name)) val = (Bit)int.Parse(Item(name)); }
|
||||
private void WriteText(string name, ref Bit val) { tw.WriteLine("{0} {1}", name, (int)val); }
|
||||
|
||||
void Read(ref byte val) { val = br.ReadByte(); }
|
||||
void Write(ref byte val) { bw.Write(val); }
|
||||
void ReadText(string name, ref byte val) { if (Present(name)) val = byte.Parse(Item(name).Replace("0x", ""), NumberStyles.HexNumber); }
|
||||
void WriteText(string name, ref byte val) { tw.WriteLine("{0} 0x{1:X2}", name, val); }
|
||||
private void Read(ref byte val) { val = br.ReadByte(); }
|
||||
private void Write(ref byte val) { bw.Write(val); }
|
||||
private void ReadText(string name, ref byte val) { if (Present(name)) val = byte.Parse(Item(name).Replace("0x", ""), NumberStyles.HexNumber); }
|
||||
private void WriteText(string name, ref byte val) { tw.WriteLine("{0} 0x{1:X2}", name, val); }
|
||||
|
||||
void Read(ref ushort val) { val = br.ReadUInt16(); }
|
||||
void Write(ref ushort val) { bw.Write(val); }
|
||||
void ReadText(string name, ref ushort val) { if (Present(name)) val = ushort.Parse(Item(name).Replace("0x", ""), NumberStyles.HexNumber); }
|
||||
void WriteText(string name, ref ushort val) { tw.WriteLine("{0} 0x{1:X4}", name, val); }
|
||||
private void Read(ref ushort val) { val = br.ReadUInt16(); }
|
||||
private void Write(ref ushort val) { bw.Write(val); }
|
||||
private void ReadText(string name, ref ushort val) { if (Present(name)) val = ushort.Parse(Item(name).Replace("0x", ""), NumberStyles.HexNumber); }
|
||||
private void WriteText(string name, ref ushort val) { tw.WriteLine("{0} 0x{1:X4}", name, val); }
|
||||
|
||||
void Read(ref uint val) { val = br.ReadUInt32(); }
|
||||
void Write(ref uint val) { bw.Write(val); }
|
||||
void ReadText(string name, ref uint val) { if (Present(name)) val = uint.Parse(Item(name).Replace("0x", ""), NumberStyles.HexNumber); }
|
||||
void WriteText(string name, ref uint val) { tw.WriteLine("{0} 0x{1:X8}", name, val); }
|
||||
private void Read(ref uint val) { val = br.ReadUInt32(); }
|
||||
private void Write(ref uint val) { bw.Write(val); }
|
||||
private void ReadText(string name, ref uint val) { if (Present(name)) val = uint.Parse(Item(name).Replace("0x", ""), NumberStyles.HexNumber); }
|
||||
private void WriteText(string name, ref uint val) { tw.WriteLine("{0} 0x{1:X8}", name, val); }
|
||||
|
||||
void Read(ref sbyte val) { val = br.ReadSByte(); }
|
||||
void Write(ref sbyte val) { bw.Write(val); }
|
||||
void ReadText(string name, ref sbyte val) { if (Present(name)) val = sbyte.Parse(Item(name).Replace("0x", ""), NumberStyles.HexNumber); }
|
||||
void WriteText(string name, ref sbyte val) { tw.WriteLine("{0} 0x{1:X2}", name, val); }
|
||||
private void Read(ref sbyte val) { val = br.ReadSByte(); }
|
||||
private void Write(ref sbyte val) { bw.Write(val); }
|
||||
private void ReadText(string name, ref sbyte val) { if (Present(name)) val = sbyte.Parse(Item(name).Replace("0x", ""), NumberStyles.HexNumber); }
|
||||
private void WriteText(string name, ref sbyte val) { tw.WriteLine("{0} 0x{1:X2}", name, val); }
|
||||
|
||||
void Read(ref short val) { val = br.ReadInt16(); }
|
||||
void Write(ref short val) { bw.Write(val); }
|
||||
void ReadText(string name, ref short val) { if (Present(name)) val = short.Parse(Item(name).Replace("0x", ""), NumberStyles.HexNumber); }
|
||||
void WriteText(string name, ref short val) { tw.WriteLine("{0} 0x{1:X4}", name, val); }
|
||||
private void Read(ref short val) { val = br.ReadInt16(); }
|
||||
private void Write(ref short val) { bw.Write(val); }
|
||||
private void ReadText(string name, ref short val) { if (Present(name)) val = short.Parse(Item(name).Replace("0x", ""), NumberStyles.HexNumber); }
|
||||
private void WriteText(string name, ref short val) { tw.WriteLine("{0} 0x{1:X4}", name, val); }
|
||||
|
||||
void Read(ref int val) { val = br.ReadInt32(); }
|
||||
void Write(ref int val) { bw.Write(val); }
|
||||
void ReadText(string name, ref int val) { if (Present(name)) val = int.Parse(Item(name).Replace("0x", ""), NumberStyles.HexNumber); }
|
||||
void WriteText(string name, ref int val) { tw.WriteLine("{0} 0x{1:X8}", name, val); }
|
||||
private void Read(ref int val) { val = br.ReadInt32(); }
|
||||
private void Write(ref int val) { bw.Write(val); }
|
||||
private void ReadText(string name, ref int val) { if (Present(name)) val = int.Parse(Item(name).Replace("0x", ""), NumberStyles.HexNumber); }
|
||||
private void WriteText(string name, ref int val) { tw.WriteLine("{0} 0x{1:X8}", name, val); }
|
||||
|
||||
void Read(ref bool val) { val = br.ReadBoolean(); }
|
||||
void Write(ref bool val) { bw.Write(val); }
|
||||
void ReadText(string name, ref bool val) { if (Present(name)) val = bool.Parse(Item(name)); }
|
||||
void WriteText(string name, ref bool val) { tw.WriteLine("{0} {1}", name, val); }
|
||||
private void Read(ref bool val) { val = br.ReadBoolean(); }
|
||||
private void Write(ref bool val) { bw.Write(val); }
|
||||
private void ReadText(string name, ref bool val) { if (Present(name)) val = bool.Parse(Item(name)); }
|
||||
private void WriteText(string name, ref bool val) { tw.WriteLine("{0} {1}", name, val); }
|
||||
}
|
||||
|
||||
|
||||
public static class BITREV
|
||||
public static class Bitrev
|
||||
{
|
||||
public static byte[] byte_8;
|
||||
static BITREV()
|
||||
static Bitrev()
|
||||
{
|
||||
make_byte_8();
|
||||
}
|
||||
static void make_byte_8()
|
||||
{
|
||||
int bits = 8;
|
||||
int n = 1 << 8;
|
||||
const int n = 1 << 8;
|
||||
byte_8 = new byte[n];
|
||||
|
||||
int m = 1;
|
||||
|
@ -845,6 +877,7 @@ namespace BizHawk.Common
|
|||
/// </summary>
|
||||
/// <typeparam name="K">dictionary keys</typeparam>
|
||||
/// <typeparam name="V">dictionary values</typeparam>
|
||||
[Serializable]
|
||||
public class WorkingDictionary<K, V> : Dictionary<K, V> where V : new()
|
||||
{
|
||||
public new V this[K key]
|
||||
|
@ -856,8 +889,15 @@ namespace BizHawk.Common
|
|||
temp = this[key] = new V();
|
||||
return temp;
|
||||
}
|
||||
set { base[key] = value; }
|
||||
set
|
||||
{
|
||||
base[key] = value;
|
||||
}
|
||||
}
|
||||
|
||||
public WorkingDictionary() { }
|
||||
|
||||
protected WorkingDictionary(SerializationInfo info, StreamingContext context) : base(info, context) { }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -872,7 +912,7 @@ namespace BizHawk.Common
|
|||
where D : IDictionary<K, L>, new()
|
||||
where L : IList<V>, IEnumerable<V>, new()
|
||||
{
|
||||
D dictionary = new D();
|
||||
readonly D dictionary = new D();
|
||||
public void Add(K key, V val)
|
||||
{
|
||||
this[key].Add(val);
|
||||
|
@ -883,9 +923,7 @@ namespace BizHawk.Common
|
|||
IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); }
|
||||
public IEnumerator<V> GetEnumerator()
|
||||
{
|
||||
foreach (L lv in dictionary.Values)
|
||||
foreach (V v in lv)
|
||||
yield return v;
|
||||
return dictionary.Values.SelectMany(lv => lv).GetEnumerator();
|
||||
}
|
||||
|
||||
public IEnumerable KeyValuePairEnumerator { get { return dictionary; } }
|
||||
|
@ -911,7 +949,8 @@ namespace BizHawk.Common
|
|||
}
|
||||
}
|
||||
|
||||
public class NotTestedException : Exception
|
||||
{
|
||||
}
|
||||
[Serializable]
|
||||
public class NotTestedException : Exception
|
||||
{
|
||||
}
|
||||
}
|
||||
|
|
|
@ -69,7 +69,7 @@ namespace BizHawk.Emulation.DiscSystem
|
|||
uint edc_poly = (uint)0x8001801B;
|
||||
|
||||
//generate the CRC table
|
||||
uint reverse_edc_poly = BITREV.reverse_32(edc_poly);
|
||||
uint reverse_edc_poly = Bitrev.reverse_32(edc_poly);
|
||||
for (uint i = 0; i < 256; ++i)
|
||||
{
|
||||
uint crc = i;
|
||||
|
|
|
@ -411,8 +411,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES
|
|||
//hflip
|
||||
if ((oam->oam[2] & 0x40) == 0)
|
||||
{
|
||||
oam->patterns[0] = BITREV.byte_8[oam->patterns[0]];
|
||||
oam->patterns[1] = BITREV.byte_8[oam->patterns[1]];
|
||||
oam->patterns[0] = Bitrev.byte_8[oam->patterns[0]];
|
||||
oam->patterns[1] = Bitrev.byte_8[oam->patterns[1]];
|
||||
}
|
||||
}
|
||||
} //sprite pattern fetch loop
|
||||
|
|
Loading…
Reference in New Issue