public ushort ReadWord(long offset)
{
var localOffset = GetLocalOffset((uint)offset);
var segment = segments[GetSegmentNo((uint)offset)];
if(localOffset == SegmentSize - 1) // cross segment read
{
var bytes = new byte[2];
bytes[0] = Marshal.ReadByte(segment + localOffset);
var secondSegment = segments[GetSegmentNo((uint)offset + 1)];
bytes[1] = Marshal.ReadByte(secondSegment);
return BitConverter.ToUInt16(bytes, 0);
}
return unchecked((ushort)Marshal.ReadInt16(segment + localOffset));
}