Relocate to more appropriate util class

This commit is contained in:
Kurt 2019-09-11 18:39:49 -07:00
parent c5ebbbbe15
commit 40cbbaa695
4 changed files with 28 additions and 29 deletions

View File

@ -14,12 +14,12 @@ public class MysteryBlock6 : SaveBlock
public bool[] MysteryGiftReceivedFlags
{
get => Util.GitBitFlagArray(Data, Offset + FlagStart, MaxReceivedFlag);
get => ArrayUtil.GitBitFlagArray(Data, Offset + FlagStart, MaxReceivedFlag);
set
{
if (value?.Length != MaxReceivedFlag)
return;
Util.SetBitFlagArray(Data, Offset + FlagStart, value);
ArrayUtil.SetBitFlagArray(Data, Offset + FlagStart, value);
SAV.Edited = true;
}
}

View File

@ -15,12 +15,12 @@ public sealed class MysteryBlock7 : SaveBlock
// Mystery Gift
public bool[] MysteryGiftReceivedFlags
{
get => Util.GitBitFlagArray(Data, Offset + FlagStart, MaxReceivedFlag);
get => ArrayUtil.GitBitFlagArray(Data, Offset + FlagStart, MaxReceivedFlag);
set
{
if (value?.Length != MaxReceivedFlag)
return;
Util.SetBitFlagArray(Data, Offset + FlagStart, value);
ArrayUtil.SetBitFlagArray(Data, Offset + FlagStart, value);
SAV.Edited = true;
}
}

View File

@ -51,5 +51,29 @@ public static IEnumerable<byte[]> EnumerateSplit(byte[] bin, int size, int start
for (int i = start; i < end; i += size)
yield return bin.Slice(i, size);
}
public static bool[] GitBitFlagArray(byte[] data, int offset, int count)
{
bool[] result = new bool[count];
for (int i = 0; i < result.Length; i++)
result[i] = (data[offset + (i >> 3)] >> (i & 7) & 0x1) == 1;
return result;
}
public static void SetBitFlagArray(byte[] data, int offset, bool[] value)
{
for (int i = 0; i < value.Length; i++)
{
if (value[i])
data[offset + (i >> 3)] |= (byte)(1 << (i & 7));
}
}
public static byte[] SetBitFlagArray(bool[] value)
{
byte[] data = new byte[value.Length / 8];
SetBitFlagArray(data, 0, value);
return data;
}
}
}

View File

@ -143,30 +143,5 @@ private static string TrimFromFirst(string input, char c)
int index = input.IndexOf(c);
return index < 0 ? input : input.Substring(0, index);
}
public static bool[] GitBitFlagArray(byte[] data, int offset, int count)
{
bool[] result = new bool[count];
for (int i = 0; i < result.Length; i++)
result[i] = (data[offset + (i >> 3)] >> (i & 7) & 0x1) == 1;
return result;
}
public static void SetBitFlagArray(byte[] data, int offset, bool[] value)
{
for (int i = 0; i < value.Length; i++)
{
if (value[i])
data[offset + (i >> 3)] |= (byte)(1 << (i & 7));
}
}
public static byte[] SetBitFlagArray(bool[] value)
{
byte[] data = new byte[value.Length / 8];
SetBitFlagArray(data, 0, value);
return data;
}
}
}