public AvalancheTester(IHashStrategy <T> hashStrategy, IBitOperator <T> bitOperator, int numInputBytes, int numOutputBytes) { _hashStrategy = hashStrategy; _bitOperator = bitOperator; _numInputBytes = numInputBytes; _numOutputBytes = numOutputBytes; }
/// <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))); }