AnPv2/CSharp/Utils/Options.cs

57 lines
1.7 KiB
C#
Executable File

using System;
using System.Collections.Generic;
namespace AnP.Utils{
public class Options{
public const int OVERWRITING = 0;
public static readonly int OVERWRITE = 1 * (int)Math.Pow(3, OVERWRITING);
public static readonly int NO_OVERWRITE = 2 * (int)Math.Pow(3, OVERWRITING);
public const int NULLISH = 1;
public static readonly int ALLOW_NULLS = 1 * (int)Math.Pow(3, NULLISH);
public static readonly int NO_NULLS = 2 * (int)Math.Pow(3, NULLISH);
public static readonly Options DEFAULT = new Options(NO_OVERWRITE + ALLOW_NULLS);
public static bool? get(int value, int option){
int ternary = value / (int)Math.Pow(3, option) % 3;
return (
ternary == 1 ? true :
ternary == 2 ? false :
null);
}
public bool? overwrite = null;
public bool? allow_null = null;
public Options(int value = 0, Options? _default = null){
if(_default == null)
_default = DEFAULT;
overwrite = get(value, OVERWRITING) ?? _default?.overwrite;
allow_null = get(value, NULLISH) ?? _default?.allow_null;
}
public int get(){
int code = 0;
foreach(KeyValuePair<int, bool?> pair in new Dictionary<int, bool?>{
{OVERWRITING, overwrite},
{NULLISH, allow_null}
})
code += (
pair.Value == true ? 1 :
pair.Value == false ? 2 :
0) * (int)Math.Pow(3, pair.Key);
return code;
}
}
}