You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

50 lines
1.2 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
namespace DotNetCTFDumper.Utils
{
public class BitDict
{
private String[] Keys;
public UInt32 flag { get; set; }
public BitDict(String[] keys)
{
Keys = keys;
}
public bool this[String key]
{
get => GetFlag(key);
// set => SetFlag(key,value);
}
public bool GetFlag(String key)
{
Int32 pos = Array.IndexOf(Keys, key);
if (pos >= 0)
{
return (flag & ((UInt32) Math.Pow(2, pos))) != 0;
}
return false;
}
public static string ToDebugString<TKey, TValue>(IDictionary<TKey, TValue> dictionary)
{
return string.Join(";", dictionary.Select(kv => kv.Key + "=" + kv.Value).ToArray());
}
public override string ToString()
{
Dictionary<String, bool> actualKeys = new Dictionary<string, bool>();
foreach (var key in Keys)
{
actualKeys[key] = this[key];
}
return ToDebugString(actualKeys);
}
}
}