protected override int DoDeserializeFromByteArray(byte[] byteArray, int startIndex)
{
using (BitReader bitReader = new BitReader(byteArray, startIndex))
{
int numberOfContinousZeroBit = 0;
while (numberOfContinousZeroBit < 8 && bitReader.MoveNext())
{
if (bitReader.Current == false)
{
numberOfContinousZeroBit++;
}
else
{
break;
}
}
switch (numberOfContinousZeroBit)
{
case 2:
this.Value = bitReader.ReadUInt32(5);
this.GUID = bitReader.ReadGuid();
this.Type = ExtendedGUID5BitUintType;
return 17;
case 5:
this.Value = bitReader.ReadUInt32(10);
this.GUID = bitReader.ReadGuid();
this.Type = ExtendedGUID10BitUintType;
return 18;
case 6:
this.Value = bitReader.ReadUInt32(17);
this.GUID = bitReader.ReadGuid();
this.Type = ExtendedGUID17BitUintType;
return 19;
case 7:
this.Value = bitReader.ReadUInt32(32);
this.GUID = bitReader.ReadGuid();
this.Type = ExtendedGUID32BitUintType;
return 21;
case 8:
this.GUID = Guid.Empty;
this.Type = ExtendedGUIDNullType;
return 1;
default:
throw new InvalidOperationException("Failed to parse the ExGuid, the type value is unexpected");
}
}
}
}