Beispiel #1
0
 public AvalancheTester(IHashStrategy <T> hashStrategy, IBitOperator <T> bitOperator, int numInputBytes, int numOutputBytes)
 {
     _hashStrategy   = hashStrategy;
     _bitOperator    = bitOperator;
     _numInputBytes  = numInputBytes;
     _numOutputBytes = numOutputBytes;
 }
Beispiel #2
0
        /// <summary>
        /// Compile a binary expression to an <see cref="IBitOperator"/>.
        /// </summary>
        /// <param name="expression">The expression.</param>
        /// <returns>The bitwise operator.</returns>
        public static IBitOperator ParseBitOperator(BinaryExpression expression)
        {
            IBitOperator        bitOperator = null;
            Func <IBitOperator> opDel       = null;

            switch (expression.NodeType)
            {
            case ExpressionType.And:
                if (expression.Left.NodeType != expression.NodeType)
                {
                    opDel = () => SqlBuilder.Instance.BitAnd;
                }
                break;

            case ExpressionType.Or:
                if (expression.Left.NodeType != expression.NodeType)
                {
                    opDel = () => SqlBuilder.Instance.BitOr;
                }
                break;

            case ExpressionType.ExclusiveOr:
                if (expression.Left.NodeType != expression.NodeType)
                {
                    opDel = () => SqlBuilder.Instance.BitXor;
                }
                break;

            default:
                throw new ArgumentException("Invalid expression.");
            }

            if (opDel != null)
            {
                bitOperator = opDel();
                bitOperator.Add(ParseValue(expression.Left));
            }
            else
            {
                bitOperator = (IBitOperator)ParseValue(expression.Left);
            }

            return(bitOperator.Add(ParseValue(expression.Right)));
        }