using System;
using System.Runtime.InteropServices;
namespace Cryptic.Core
{
static class RawSerializer <TTarget>
where TTarget : struct
{
public static int Size
{
get
{
return Marshal.SizeOf (typeof (TTarget));
}
}
public static unsafe byte [] Serialize (TTarget target)
{
byte [] raw = new byte [Size];
fixed (byte * rawPointer = raw)
{
IntPtr managedPointer = new IntPtr (rawPointer);
Marshal.StructureToPtr (target, managedPointer, false);
}
return raw;
}
public static unsafe TTarget Deserialize (byte [] raw)
{
object target;
fixed (byte * rawPointer = raw)
{
IntPtr managedPointer = new IntPtr (rawPointer);
target = Marshal.PtrToStructure (managedPointer, typeof (TTarget));
}
return (TTarget) target;
}
}
}