OverrideModeSetting
struct OverrideModeSetting
using System.Globalization;
namespace System.Configuration
{
internal struct OverrideModeSetting
{
private const byte ApiDefinedLegacy = 16;
private const byte ApiDefinedNewMode = 32;
private const byte ApiDefinedAny = 48;
private const byte XmlDefinedLegacy = 64;
private const byte XmlDefinedNewMode = 128;
private const byte XmlDefinedAny = 192;
private const byte ModeMask = 15;
private byte _mode;
internal static readonly OverrideModeSetting s_sectionDefault;
internal static readonly OverrideModeSetting s_locationDefault;
internal bool IsDefaultForSection {
get {
OverrideMode overrideMode = OverrideMode;
if (overrideMode != OverrideMode.Allow)
return overrideMode == OverrideMode.Inherit;
return true;
}
}
internal bool IsDefaultForLocationTag {
get {
if (s_locationDefault.OverrideMode == OverrideMode && (_mode & 48) == 0)
return (_mode & 192) == 0;
return false;
}
}
internal bool IsLocked => OverrideMode == OverrideMode.Deny;
internal string LocationTagXmlString {
get {
string result = string.Empty;
bool flag = false;
bool flag2 = false;
if ((_mode & 48) != 0) {
flag2 = ((_mode & 16) != 0);
flag = true;
} else if ((_mode & 192) != 0) {
flag2 = ((_mode & 64) != 0);
flag = true;
}
if (flag) {
string arg;
string arg2;
if (flag2) {
arg = "allowOverride";
arg2 = (AllowOverride ? "true" : "false");
} else {
arg = "overrideMode";
arg2 = OverrideModeXmlValue;
}
result = string.Format(CultureInfo.InvariantCulture, "{0}=\"{1}\"", arg, arg2);
}
return result;
}
}
internal string OverrideModeXmlValue {
get {
switch (OverrideMode) {
case OverrideMode.Inherit:
return "Inherit";
case OverrideMode.Allow:
return "Allow";
case OverrideMode.Deny:
return "Deny";
default:
return null;
}
}
}
internal OverrideMode OverrideMode {
get {
return (OverrideMode)(_mode & 15);
}
set {
VerifyConsistentChangeModel(32);
SetMode(value);
_mode |= 32;
}
}
internal bool AllowOverride {
get {
bool result = true;
switch (OverrideMode) {
case OverrideMode.Deny:
result = false;
break;
}
return result;
}
set {
VerifyConsistentChangeModel(16);
SetMode((!value) ? OverrideMode.Deny : OverrideMode.Inherit);
_mode |= 16;
}
}
internal static OverrideModeSetting CreateFromXmlReadValue(bool allowOverride)
{
OverrideModeSetting result = default(OverrideModeSetting);
result.SetMode((!allowOverride) ? OverrideMode.Deny : OverrideMode.Inherit);
result._mode |= 64;
return result;
}
internal static OverrideModeSetting CreateFromXmlReadValue(OverrideMode mode)
{
OverrideModeSetting result = default(OverrideModeSetting);
result.SetMode(mode);
result._mode |= 128;
return result;
}
internal static OverrideMode ParseOverrideModeXmlValue(string value, XmlUtil xmlUtil)
{
if (value == "Inherit")
return OverrideMode.Inherit;
if (value == "Allow")
return OverrideMode.Allow;
if (!(value == "Deny"))
throw new ConfigurationErrorsException(System.SR.Config_section_override_mode_attribute_invalid, xmlUtil);
return OverrideMode.Deny;
}
internal static bool CanUseSameLocationTag(OverrideModeSetting x, OverrideModeSetting y)
{
bool flag = x.OverrideMode == y.OverrideMode;
if (!flag)
return false;
if ((x._mode & 48) != 0)
flag = IsMatchingApiChangedLocationTag(x, y);
else if ((y._mode & 48) != 0) {
flag = IsMatchingApiChangedLocationTag(y, x);
} else if ((x._mode & 192) != 0 || (y._mode & 192) != 0) {
flag = ((x._mode & 192) == (y._mode & 192));
}
return flag;
}
private static bool IsMatchingApiChangedLocationTag(OverrideModeSetting x, OverrideModeSetting y)
{
bool result = false;
if ((y._mode & 48) != 0)
result = ((x._mode & 48) == (y._mode & 48));
else if ((y._mode & 192) != 0) {
result = (((x._mode & 16) != 0 && (y._mode & 64) != 0) || ((x._mode & 32) != 0 && (y._mode & 128) != 0));
}
return result;
}
internal void ChangeModeInternal(OverrideMode mode)
{
SetMode(mode);
}
private void SetMode(OverrideMode mode)
{
_mode = (byte)mode;
}
private void VerifyConsistentChangeModel(byte required)
{
byte b = (byte)(_mode & 48);
if (b != 0 && b != required)
throw new ConfigurationErrorsException(System.SR.Cannot_change_both_AllowOverride_and_OverrideMode);
}
static OverrideModeSetting()
{
OverrideModeSetting overrideModeSetting = new OverrideModeSetting {
_mode = 1
};
s_sectionDefault = overrideModeSetting;
overrideModeSetting = new OverrideModeSetting {
_mode = 0
};
s_locationDefault = overrideModeSetting;
}
}
}