Esempio n. 1
0
        public static ExpressionStarter <T> PredicateByOperationType <T>(this ExpressionStarter <T> predicate,
                                                                         BitwiseOperation operation,
                                                                         Expression <Func <T, bool> > expr)
        {
            switch (operation)
            {
            case BitwiseOperation.And:
                predicate = predicate.And(expr);
                break;

            case BitwiseOperation.Or:
                predicate = predicate.Or(expr);
                break;
            }

            return(predicate);
        }
Esempio n. 2
0
        public static BitArray operator -(BitArray lhs, BitArray rhs)
        {
            var num = BitwiseOperation.Subtract(lhs.bits, rhs.bits);

            return(new BitArray(num));
        }
Esempio n. 3
0
        public void InvertMustWorkCorrectly(bool[] num, bool[] bits)
        {
            bool[] output = BitwiseOperation.Invert(num);

            Assert.Equal <bool[]>(bits, output);
        }
Esempio n. 4
0
        public void UnaryMinusMustWorkCorrectly(bool[] num, bool[] result)
        {
            bool[] output = BitwiseOperation.UnaryMinus(num);

            Assert.Equal <bool[]>(result, output);
        }
Esempio n. 5
0
 private static Variable Bitwise(BitwiseOperation op, Variable var1, Variable var2)
 {
     return(Bitwise(op, var1?.Value, var2?.Value));
 }
Esempio n. 6
0
        public void ArithmeticRightShiftMustWorkCorrectly(bool[] num, bool[] bits, int shift)
        {
            bool[] output = BitwiseOperation.ArithmeticRightShift(num, shift);

            Assert.Equal <bool[]>(bits, output);
        }
        public static ArrayBitwiseOperation <T> GetBitwiseOperationDelegateVector256 <T>(BitwiseOperation operation)
            where T : unmanaged
        {
            switch (operation)
            {
            case BitwiseOperation.AND:
                return(ANDArrayVector256);

            case BitwiseOperation.OR:
                return(ORArrayVector256);

            case BitwiseOperation.XOR:
                return(XORArrayVector256);

            case BitwiseOperation.NAND:
                return(NANDArrayVector256);

            case BitwiseOperation.NOR:
                return(NORArrayVector256);

            case BitwiseOperation.XNOR:
                return(XNORArrayVector256);
            }
            return(null);
        }
Esempio n. 8
0
        public static BitArray operator -(BitArray bits)
        {
            var num = BitwiseOperation.UnaryMinus(bits.bits);

            return(new BitArray(num));
        }
 public static bool PerformBitwiseOperationVector256CustomType <T>(T *origin, T *target, T mask, uint length, BitwiseOperation operation)
     where T : unmanaged
 {
     switch (sizeof(T))
     {
     case sizeof(byte):
     case sizeof(short):
     case sizeof(int):
     case sizeof(long):
         return(GetBitwiseOperationDelegateVector256 <T>(operation)(origin, target, mask, length));
     }
     // TODO: Support types with different sizes too
     return(false);
 }
        private static bool PerformArrayBitwiseOperationVector256CustomType <T>(T *origin, T *target, T mask, uint length, BitwiseOperation operation)
            where T : unmanaged
        {
            if (EvaluateMaskConvertibility <T, byte>(&mask))
            {
                return(PerformBitwiseOperationVector256As <T, byte>(origin, target, &mask, length, operation));
            }
            if (EvaluateMaskConvertibility <T, short>(&mask))
            {
                return(PerformBitwiseOperationVector256As <T, short>(origin, target, &mask, length, operation));
            }
            if (EvaluateMaskConvertibility <T, int>(&mask))
            {
                return(PerformBitwiseOperationVector256As <T, int>(origin, target, &mask, length, operation));
            }
            if (EvaluateMaskConvertibility <T, long>(&mask))
            {
                return(PerformBitwiseOperationVector256As <T, long>(origin, target, &mask, length, operation));
            }

            return(false);
        }
 private static bool PerformBitwiseOperationCustomType <T>(T *origin, T *target, T mask, uint length, BitwiseOperation operation, SIMDVectorType vectorType)
     where T : unmanaged
 {
     switch (sizeof(T))
     {
     case sizeof(byte):
     case sizeof(short):
     case sizeof(int):
     case sizeof(long):
         // Okay this is kinda ridiculous
         return(GetBitwiseOperationDelegateReturner <T>(vectorType)(operation)(origin, target, mask, length));
     }
     // TODO: Support types with different sizes too
     return(false);
 }
 private static bool PerformBitwiseOperationVector256As <TOrigin, TNew>(TOrigin *origin, TOrigin *target, TOrigin *mask, uint length, BitwiseOperation operation)
     where TOrigin : unmanaged
     where TNew : unmanaged
 {
     return(PerformBitwiseOperationAs(origin, target, mask, length, operation, GetBitwiseOperationDelegateVector256 <TNew>));
 }
        private static bool PerformBitwiseOperationAs <TOrigin, TNew>(TOrigin *origin, TOrigin *target, TOrigin *mask, uint length, BitwiseOperation operation, ArrayBitwiseOperationDelegateReturner <TNew> delegateReturner)
            where TOrigin : unmanaged
            where TNew : unmanaged
        {
            uint newLength = length * (uint)sizeof(TOrigin) / (uint)sizeof(TNew);

            return(delegateReturner(operation)?.Invoke((TNew *)origin, (TNew *)target, *(TNew *)mask, newLength) == true);
        }
Esempio n. 14
0
        public static BitArray operator *(BitArray lhs, BitArray rhs)
        {
            var num = BitwiseOperation.Multiply(lhs.bits, rhs.bits);

            return(new BitArray(num));
        }
Esempio n. 15
0
        public void MultiplyMustWorkCorrectly(bool[] lhs, bool[] rhs, bool[] result)
        {
            bool[] output = BitwiseOperation.Multiply(lhs, rhs);

            Assert.Equal <bool[]>(result, output);
        }
Esempio n. 16
0
        public static BitArray operator ~(BitArray bits)
        {
            var num = BitwiseOperation.Invert(bits.bits);

            return(new BitArray(num));
        }
Esempio n. 17
0
        public void SubtractMustWorkCorrectly(bool[] lhs, bool[] rhs, bool[] result)
        {
            bool[] output = BitwiseOperation.Subtract(lhs, rhs);

            Assert.Equal <bool[]>(result, output);
        }
Esempio n. 18
0
        public static BitArray operator >>(BitArray bits, int shift)
        {
            var num = BitwiseOperation.ArithmeticRightShift(bits.bits, shift);

            return(new BitArray(num));
        }
Esempio n. 19
0
 /// <summary>
 /// Return number as a bit collection.
 /// Collection starts from top order bit.
 /// </summary>
 /// <param name="num"></param>
 /// <returns></returns>
 public static IEnumerable <bool> GetNextBit(this ulong num) => BitwiseOperation.GetBitsReversed(num).Reverse();