public static AccessValue operator &(AccessValue a, AccessValue b) { AccessValue c = new AccessValue(); foreach (var aItem in a.Items) { var bItem = b.Get(aItem.Identity); if (bItem != AccessItem.Empty) { c.Add(aItem.Identity, aItem.Access & bItem.Access); } } foreach (var bItem in b.Items) { var aItem = a.Get(bItem.Identity); if (aItem != AccessItem.Empty) { c.Add(bItem.Identity, aItem.Access & bItem.Access); } } return(c); }
public static AccessValue operator |(AccessValue a, AccessValue b) { AccessValue c = new AccessValue(); foreach (var aItem in a.Items) { if (b.items.TryGetValue(aItem.Identity, out var bItem)) { c.Add(aItem.Identity, aItem.Access | bItem.Access); } else { c.Add(aItem.Identity, aItem.Access); } } foreach (var bItem in b.Items) { if (!a.items.TryGetValue(bItem.Identity, out var aItem)) { c.Add(bItem.Identity, bItem.Access); } } return(c); }