public ExpressionTransactionSet(Expression expression, ExpressionWriteTransaction write)
        {
            this.Transactions = new List <ExpressionTransaction>();
            if (expression.Layer > 0)
            {
                //allow 1 register for each subexpression
                RegisterMemory = expression.Subexpressions.Count;
                expression.Subexpressions.Sort();

                for (var index = 0; index < expression.Subexpressions.Count; index++)
                {
                    var s = expression.Subexpressions[index];
                    s.RegisterIndex = index + 1;
                    var tmp = new ExpressionTransaction(s.Value,
                                                        new ExpressionWriteTransaction(ExprOutLoc.RegisterBank, s.RegisterIndex));
                    Transactions.Add(tmp);
                }
            }
            else
            {
                RegisterMemory = 1;
            }

            //write the final output of the expression tot he first register
            expression.RegisterIndex = 0;
            Transactions.Add(new ExpressionTransaction(expression.Value, write));
        }
예제 #2
0
 public ExpressionTransactionSet GenerateExpressionTransactions(ExpressionWriteTransaction write)
 {
     if (!Simple)
     {
         throw new Exception("Only simple equations (+,*) allowed in this build.");
     }
     return(new ExpressionTransactionSet(this, write));
 }
 public ExpressionTransaction(AdditionString expression, ExpressionWriteTransaction transaction)
 {
     this.Transaction = transaction;
     this.Expression  = new AddTransaction(expression);
 }