コード例 #1
0
 public ArrSet3(Multioperation3 op)
 {
     Add(Multioperation3.Zero);
     Add(Multioperation3.E);
     Add(Multioperation3.All);
     Add(op);
 }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
 public bool Contains(Multioperation3 op)
 {
     return(opFlags[op.Value] == 1);
 }