Ejemplo n.º 1
0
        private static bool EvaluateMaskConvertibility <TOrigin, TNew>(TOrigin *mask)
            where TOrigin : unmanaged
            where TNew : unmanaged
        {
            if (sizeof(TOrigin) == sizeof(TNew))
            {
                return(true);
            }

            if (sizeof(TOrigin) % sizeof(TNew) != 0)
            {
                return(false);
            }

            // Consider the mask as an array of TNew, and evaluate all its elements
            var  reinterpretedMask = (TNew *)mask;
            uint length            = (uint)sizeof(TOrigin) / (uint)sizeof(TNew);

            for (uint i = 1; i < length; i++)
            {
                if (!reinterpretedMask[i].Equals(reinterpretedMask[0]))
                {
                    return(false);
                }
            }
            return(true);
        }
Ejemplo n.º 2
0
        protected override unsafe object GetExpectedResult <TOrigin, TTarget>(TOrigin *origin, int index)
        {
            // That escalated quickly

            if (typeof(TOrigin) == typeof(TTarget))
            {
                return(*(TTarget *)&origin[index]);
            }

            if (typeof(TOrigin) == typeof(double))
            {
                long result = (long)*(double *)&origin[index];
                return(GetExpectedResult <long, TTarget>(&result, 0));
            }
            if (typeof(TOrigin) == typeof(float))
            {
                long result = (long)*(float *)&origin[index];
                return(GetExpectedResult <long, TTarget>(&result, 0));
            }

            if (sizeof(TOrigin) > sizeof(TTarget))
            {
                var result = *(TTarget *)&origin[index];
                return(result);
            }

            return(base.GetExpectedResult <TOrigin, TTarget>(origin, index));
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
 protected override unsafe object GetExpectedResult <TOrigin, TTarget>(TOrigin *origin, int index) => ValueManipulation.XNORRescaleMask(*(TTarget *)(origin + index), Mask);
Ejemplo n.º 5
0
 protected override unsafe object GetExpectedResult <TOrigin, TTarget>(TOrigin *origin, int index) => ValueManipulation.NOT((TTarget)base.GetExpectedResult <TOrigin, TTarget>(origin, index));
Ejemplo n.º 6
0
 protected virtual unsafe object GetExpectedResult <TOrigin, TTarget>(TOrigin *origin, int index)
     where TOrigin : unmanaged
     where TTarget : unmanaged
 {
     return(origin[index]);
 }
Ejemplo n.º 7
0
 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>));
 }