You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
2.1 KiB
76 lines
2.1 KiB
using System.Runtime.InteropServices;
|
|
using System;
|
|
|
|
namespace DataService
|
|
{
|
|
[StructLayout(LayoutKind.Explicit, Size = 4)]
|
|
public struct Storage
|
|
{
|
|
// Fields
|
|
[FieldOffset(0)]
|
|
public bool Boolean;
|
|
[FieldOffset(0)]
|
|
public byte Byte;
|
|
[FieldOffset(0)]
|
|
public short Int16;
|
|
[FieldOffset(0)]
|
|
public int Int32;
|
|
[FieldOffset(0)]
|
|
public float Single;
|
|
[FieldOffset(0)]
|
|
public ushort Word;
|
|
[FieldOffset(0)]
|
|
public uint DWord;
|
|
|
|
public static readonly Storage Empty ;
|
|
|
|
static Storage()
|
|
{
|
|
Empty = new Storage();
|
|
}
|
|
|
|
public override bool Equals(object obj)
|
|
{
|
|
if (obj == null) return false;
|
|
Type type = obj.GetType();
|
|
if (type == typeof(Storage))
|
|
return this.Int32 == ((Storage)obj).Int32;
|
|
else
|
|
{
|
|
if (type == typeof(int))
|
|
return this.Int32 == (int)obj;
|
|
if (type == typeof(short))
|
|
return this.Int16 == (short)obj;
|
|
if (type == typeof(byte))
|
|
return this.Byte == (byte)obj;
|
|
if (type == typeof(bool))
|
|
return this.Boolean == (bool)obj;
|
|
if (type == typeof(float))
|
|
return this.Single == (float)obj;
|
|
if (type == typeof(ushort))
|
|
return this.Word == (ushort)obj;
|
|
if (type == typeof(uint))
|
|
return this.DWord == (uint)obj;
|
|
if (type == typeof(string))
|
|
return this.ToString() == obj.ToString();
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public override int GetHashCode()
|
|
{
|
|
return Int32.GetHashCode();
|
|
}
|
|
|
|
public static bool operator ==(Storage x, Storage y)
|
|
{
|
|
return x.Int32 == y.Int32;
|
|
}
|
|
|
|
public static bool operator !=(Storage x, Storage y)
|
|
{
|
|
return x.Int32 != y.Int32;
|
|
}
|
|
}
|
|
|
|
}
|