【C#】ビット操作用クラス
BitArray で機能が物足りない時に作成したものを公開しています。
目次
ソースコード
using System;
namespace mira
{
/// <summary>
/// ビット操作によるフラグ
/// </summary>
public class BitFlag<T> where T : struct
{
private int m_flag;
/// <summary>
/// フラグ追加
/// </summary>
/// <param name="_flag"></param>
public void AddFlag(T _flag)
{
m_flag |= 1 << GetIntValue(_flag);
}
/// <summary>
/// フラグ削除
/// </summary>
/// <param name="_flag"></param>
public void DelFlag(T _flag)
{
m_flag &= ~(1 << GetIntValue(_flag));
}
/// <summary>
/// フラグ設定
/// </summary>
/// <param name="_flag"></param>
public void SetFlag(T _flag, bool _b)
{
if (_b)
{
AddFlag(_flag);
}
else
{
DelFlag(_flag);
}
}
/// <summary>
/// フラグ確認
/// </summary>
/// <param name="_flag"></param>
public bool HasFlag(T _flag)
{
return (m_flag & (1 << GetIntValue(_flag))) > 0;
}
/// <summary>
/// フラグ確認(一度だけ。確認した後は折れる)
/// </summary>
/// <param name="_flag"></param>
public bool OneTimeFlag(T _flag)
{
var temp = HasFlag(_flag);
DelFlag(_flag);
return temp;
}
/// <summary>
/// フラグのリセット
/// </summary>
public void ResetFlag()
{
m_flag = 0;
}
/// <summary>
/// intへ変換
/// </summary>
private int GetIntValue(T _flag)
{
return (int)((object)_flag);
}
}
}
使い方
// 宣言周り
public enum Flag
{
Jump,
OnClose,
}
private BitFlag<Flag> flag = new BitFlag<Flag>();
// フラグ追加
flag.AddFlag(Flag.Jump);
// フラグ確認
if (flag.OneTimeFlag(Flag.Jump))
{
// 処理
}