add serializer SyncFixedString
This commit is contained in:
parent
57672564a5
commit
6a409e9b73
|
@ -736,6 +736,45 @@ namespace BizHawk
|
||||||
if (IsReader) ReadText(name, ref val);
|
if (IsReader) ReadText(name, ref val);
|
||||||
else WriteText(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..
|
||||||
|
|
||||||
|
if (IsReader)
|
||||||
|
{
|
||||||
|
char[] buf = new char[length];
|
||||||
|
if (isText)
|
||||||
|
{
|
||||||
|
tr.Read(buf, 0, length);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
br.Read(buf, 0, length);
|
||||||
|
}
|
||||||
|
int len = 0;
|
||||||
|
for (; len < length; len++)
|
||||||
|
{
|
||||||
|
if (buf[len] == 0) break;
|
||||||
|
}
|
||||||
|
val = new string(buf, 0, len);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (name.Length > length) throw new InvalidOperationException("SyncFixedString too long");
|
||||||
|
char[] buf = val.ToCharArray();
|
||||||
|
char[] remainder = new char[length - buf.Length];
|
||||||
|
if (IsText)
|
||||||
|
{
|
||||||
|
tw.Write(buf);
|
||||||
|
tw.Write(remainder);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bw.Write(buf);
|
||||||
|
bw.Write(remainder);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Read(ref Bit val) { val = br.ReadBit(); }
|
void Read(ref Bit val) { val = br.ReadBit(); }
|
||||||
void Write(ref Bit val) { bw.WriteBit(val); }
|
void Write(ref Bit val) { bw.WriteBit(val); }
|
||||||
|
|
Loading…
Reference in New Issue