public ArrSet3(Multioperation3 op) { Add(Multioperation3.Zero); Add(Multioperation3.E); Add(Multioperation3.All); Add(op); }
public int Add(Multioperation3 op) { var prev = Interlocked.CompareExchange(ref opFlags[op.Value], 1, 0); if (prev != 0) { return(prev); } opList[_count] = op; Interlocked.Add(ref _count, 1 - prev); return(prev); }
public static int CheckOp3Arr(Multioperation3 op) { var set = new ArrSet3(op); if (set.Count <= 3) { return(set.Count); } var prevCount = 0; while (set.Count < 512 && prevCount != set.Count) { prevCount = set.Count; for (int i = 0; i < set.Count; i++) { set.Add(!set[i]); } for (int i = 0; i < set.Count; i++) { var op1 = set[i]; if (op1 == Multioperation3.Zero) { continue; } for (int j = 0; j < set.Count; j++) { var op2 = set[j]; if (op2 == Multioperation3.Zero) { continue; } var opSup = op1 * op2; var opUn = op1 & op2; set.Add(opSup); set.Add(opUn); if (op1 == op2) { continue; } opSup = op2 * op1; set.Add(opSup); } } } return(set.Count); }
public bool Contains(Multioperation3 op) { return(opFlags[op.Value] == 1); }