using System.Collections.Generic;
using System.Runtime.InteropServices;
using System;
namespace YKMoon.Math
{
///
/// Custom int mask like unity layoutmask.
///
[StructLayout(LayoutKind.Sequential)]
public struct IntMask
{
private int m_Mask;
public static implicit operator int(IntMask mask)
{
return mask.m_Mask;
}
public static implicit operator IntMask(int intVal)
{
IntMask mask;
mask.m_Mask = intVal;
return mask;
}
public int value {
get {
return this.m_Mask;
}
set {
this.m_Mask = value;
}
}
public void Set(int pos, bool value)
{
if (value) {
this.m_Mask |= 1 << pos;
} else {
this.m_Mask &= ~(1 << pos);
}
}
public static int GetMask(params int[] values)
{
if (values == null) {
throw new ArgumentNullException("values");
}
int num = 0;
for(int i=0; i values)
{
if(values == null) {
throw new ArgumentNullException("values");
}
int num = 0;
for(int i = 0; i < values.Count; i++) {
int intval = values[i];
if(intval != -1) {
num |= 1 << intval;
}
}
return num;
}
public bool Contains(int layer)
{
return ((m_Mask & (1 << layer)) > 0);
}
}
}