New Member FAQ | Forums | Earn Revenue


Resources Entrance Ask Experts Exam Papers Jobs English Projects Universities Colleges Courses Schools Training My India



My Profile
Active Members
TodayLast 7 Days more...



Awards & Gifts
Online Exams

Fresher Jobs


Our fresher job section is exclusively for fresh graduates! Find jobs for freshers in major Indian cities including Bangalore, Chennai, Hyderabad, Pune or Kochi

Resources


Find educational articles, blogs, discussion threads and other resources.

Colleges


Find details about any college in India or search for courses.

website counter



Multi Variable Array Operation Acceptor


Posted Date:     Total Responses: 0    Posted By: Mahesh   Member Level: Platinum   Points/Cash: 8   


using System;
using System.Collections.Generic;
using System.Text;
using BaseTypes;

namespace FormulaEditor
{
public class MultiVariableArrayOperationAcceptor : IMultiVariableOperationAcceptor, IMultiVariableOperation
{

#region Fields

private IMultiVariableOperationAcceptor acceptor;

private IMultiVariableOperation operation;
private IMultiVariableOperation op;
protected object[] y;
protected object[] types;
protected ArrayReturnType returnType;
protected object returnValue;
protected bool[] isArray;
protected int length = 0;
protected int[] rank;
protected int[][] ranks;
protected object[][] yy;
protected object[] yt;

#endregion

public MultiVariableArrayOperationAcceptor(IMultiVariableOperationAcceptor acceptor)
{
this.acceptor = acceptor;
}


#region IMultiVariableOperationAcceptor Members

public IMultiVariableOperation AcceptOperation(MathSymbol symbol)
{
operation = acceptor.AcceptOperation(symbol);
return this;
}

#endregion

#region IOperationAcceptor Members

public IObjectOperation Accept(object type)
{
IObjectOperation ownOp = acceptor.Accept(type);
if (ownOp != null)
{
return ownOp;
}
if (type is ArrayReturnType)
{
ArrayReturnType a = type as ArrayReturnType;
if (a.IsObjectType)
{
op = acceptor.Accept(a) as IMultiVariableOperation;
if (op == null)
{
return null;
}
types = new object[] { type };
ArrayOperation.CreateAllArrays(op, types, out y, out yy, out rank, out ranks);
returnType = new ArrayReturnType(op.ReturnType, rank, true);
return this;
}
}
return null;
}

#endregion

#region IMultiVariableOperation Members

public IObjectOperation Accept(object[] types)
{
this.types = types;
if (acceptor is IMultiVariableOperation)
{
IMultiVariableOperation ma = acceptor as IMultiVariableOperation;
IObjectOperation ownOp = ma.Accept(types);
if (ownOp != null)
{
return ownOp;
}
}
if (types == null)
{
return acceptor.Accept(null);
}
object[] t = new object[types.Length];
bool isArray = false;
for (int i = 0; i < t.Length; i++)
{
t[i] = ArrayReturnType.GetBaseType(types[i]);
if (types[i] is ArrayReturnType)
{
isArray = true;
}
}
IObjectOperation opr = operation.Accept(t);
if (opr == null)
{
return null;
}
if (!isArray)
{
return opr;
}
ArrayOperation.CreateAllArrays(opr, types, out y, out yy, out rank, out ranks);
returnType = new ArrayReturnType(opr.ReturnType, rank, true);
returnValue = y;
if (types != null)
{
if (types.Length > 0)
{
yt = new object[types.Length];
}
}
return this;
}

#endregion

#region IObjectOperation Members

public int Arity
{
get
{
return types.Length;
}
}

public object this[object[] x]
{
get
{
ArrayOperation.PerformOperation(operation, returnValue as object[], x, yy,
rank.Length, ranks, rank, yt);
return returnValue;
}
}

public object ReturnType
{
get
{
return returnType;
}
}

public bool IsPowered
{
get
{
return op.IsPowered;
}
}

#endregion


}
}


Project Feedbacks


No feedbacks found. Be the first to respond and make money from revenue sharing program.

Post Feedback
You must Sign In to post a feedback.
Next Project: Negation operation in C Sharp
Previous Project: Multi Array Operation Detector

Return to Project Index

Post New Project


Related Projects



Advertise Here





Contact Us   Advertise   Editors    Privacy Policy    Terms Of Use   

ISC Technologies.
2006 - 2009 All Rights Reserved.