本文整理汇总了C#中FunctionDefinition类的典型用法代码示例。如果您正苦于以下问题:C# FunctionDefinition类的具体用法?C# FunctionDefinition怎么用?C# FunctionDefinition使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
FunctionDefinition类属于命名空间,在下文中一共展示了FunctionDefinition类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: PackageItemRootViewModel
public PackageItemRootViewModel(FunctionDefinition def)
{
this.Height = 32;
this.DependencyType = DependencyType.CustomNode;
this.Definition = def;
this.BuildDependencies(new HashSet<object>());
}
示例2: CreateFibFunction
/// <summary>
/// Creates the fibonacci function
/// </summary>
private static Function CreateFibFunction(Win64Container container, bool optimize = false)
{
var intType = container.VirtualMachine.TypeProvider.GetPrimitiveType(PrimitiveTypes.Int);
var def = new FunctionDefinition("fib", Enumerable.Repeat(intType, 1).ToList(), intType);
var instructions = new List<Instruction>();
instructions.Add(new Instruction(OpCodes.LoadArgument, 0));
instructions.Add(new Instruction(OpCodes.LoadInt, 1));
instructions.Add(new Instruction(OpCodes.BranchGreaterThan, 5));
instructions.Add(new Instruction(OpCodes.LoadArgument, 0));
instructions.Add(new Instruction(OpCodes.Ret));
instructions.Add(new Instruction(OpCodes.LoadArgument, 0));
instructions.Add(new Instruction(OpCodes.LoadInt, 2));
instructions.Add(new Instruction(OpCodes.SubInt));
instructions.Add(new Instruction(OpCodes.Call, "fib", Enumerable.Repeat(intType, 1).ToList()));
instructions.Add(new Instruction(OpCodes.LoadArgument, 0));
instructions.Add(new Instruction(OpCodes.LoadInt, 1));
instructions.Add(new Instruction(OpCodes.SubInt));
instructions.Add(new Instruction(OpCodes.Call, "fib", Enumerable.Repeat(intType, 1).ToList()));
instructions.Add(new Instruction(OpCodes.AddInt));
instructions.Add(new Instruction(OpCodes.Ret));
return new Function(def, instructions, new List<VMType>())
{
Optimize = optimize
};
}
示例3: CompileFunction
public static FScheme.Expression CompileFunction( FunctionDefinition definition )
{
IEnumerable<string> ins = new List<string>();
IEnumerable<string> outs = new List<string>();
return CompileFunction(definition, ref ins, ref outs);
}
示例4: CreateLoopCallAdd
/// <summary>
/// Creates a loop call add function
/// </summary>
private static Function CreateLoopCallAdd(Win64Container container, int count, bool optimize = false)
{
var intType = container.VirtualMachine.TypeProvider.GetPrimitiveType(PrimitiveTypes.Int);
var def = new FunctionDefinition("main", new List<VMType>(), intType);
var instructions = new List<Instruction>();
instructions.Add(new Instruction(OpCodes.LoadInt, count));
instructions.Add(new Instruction(OpCodes.StoreLocal, 0));
instructions.Add(new Instruction(OpCodes.LoadInt, 1));
instructions.Add(new Instruction(OpCodes.LoadLocal, 1));
instructions.Add(new Instruction(OpCodes.Call, "add", Enumerable.Repeat(intType, 2).ToList()));
instructions.Add(new Instruction(OpCodes.StoreLocal, 1));
instructions.Add(new Instruction(OpCodes.LoadLocal, 0));
instructions.Add(new Instruction(OpCodes.LoadInt, 1));
instructions.Add(new Instruction(OpCodes.SubInt));
instructions.Add(new Instruction(OpCodes.StoreLocal, 0));
instructions.Add(new Instruction(OpCodes.LoadLocal, 0));
instructions.Add(new Instruction(OpCodes.LoadInt, 0));
instructions.Add(new Instruction(OpCodes.BranchGreaterThan, 2));
instructions.Add(new Instruction(OpCodes.LoadLocal, 1));
instructions.Add(new Instruction(OpCodes.Ret));
return new Function(def, instructions, new List<VMType>() { intType, intType })
{
Optimize = optimize
};
}
示例5: AddFunction
/// <summary>
/// Creates a add function with that takes the given amount of arguments
/// </summary>
/// <param name="container">The container</param>
/// <param name="numArgs">The number of arguments</param>
public static Function AddFunction(Win64Container container, int numArgs)
{
var intType = container.VirtualMachine.TypeProvider.GetPrimitiveType(PrimitiveTypes.Int);
var parameters = new List<VMType>();
for (int i = 0; i < numArgs; i++)
{
parameters.Add(intType);
}
var def = new FunctionDefinition("add", parameters, intType);
var instructions = new List<Instruction>();
instructions.Add(new Instruction(OpCodes.LoadArgument, 0));
for (int i = 1; i < numArgs; i++)
{
instructions.Add(new Instruction(OpCodes.LoadArgument, i));
instructions.Add(new Instruction(OpCodes.AddInt));
}
instructions.Add(new Instruction(OpCodes.Ret));
return new Function(def, instructions, new List<VMType>());
}
示例6: TestLocals1
public void TestLocals1()
{
using (var container = new Win64Container())
{
var intType = container.VirtualMachine.TypeProvider.GetPrimitiveType(PrimitiveTypes.Int);
var funcDef = new FunctionDefinition("main", new List<VMType>(), intType);
var instructions = new List<Instruction>();
instructions.Add(new Instruction(OpCodes.LoadInt, 100));
instructions.Add(new Instruction(OpCodes.StoreLocal, 0));
instructions.Add(new Instruction(OpCodes.LoadInt, 200));
instructions.Add(new Instruction(OpCodes.StoreLocal, 1));
instructions.Add(new Instruction(OpCodes.LoadInt, 300));
instructions.Add(new Instruction(OpCodes.StoreLocal, 2));
instructions.Add(new Instruction(OpCodes.LoadInt, 400));
instructions.Add(new Instruction(OpCodes.StoreLocal, 3));
instructions.Add(new Instruction(OpCodes.LoadLocal, 3));
instructions.Add(new Instruction(OpCodes.Ret));
var func = new Function(funcDef, instructions, Enumerable.Repeat(intType, 4).ToList());
container.LoadAssembly(Assembly.SingleFunction(func));
Assert.AreEqual(400, container.Execute());
}
}
示例7: CreateFunction
public override Function CreateFunction(
IEnumerable<string> inputs,
IEnumerable<string> outputs,
FunctionDefinition functionDefinition)
{
if (functionDefinition.WorkspaceModel.Nodes.Any(x => x is RevitTransactionNode)
|| functionDefinition.Dependencies.Any(d => d.WorkspaceModel.Nodes.Any(x => x is RevitTransactionNode)))
{
return new FunctionWithRevit(inputs, outputs, functionDefinition);
}
return base.CreateFunction(inputs, outputs, functionDefinition);
}
示例8: dynFunction
public dynFunction(IEnumerable<string> inputs, IEnumerable<string> outputs, FunctionDefinition def)
: base(def.FunctionId.ToString())
{
_def = def;
//Set inputs and output
SetInputs(inputs);
foreach (var output in outputs)
OutPortData.Add(new PortData(output, "function output", typeof (object)));
RegisterAllPorts();
ArgumentLacing = LacingStrategy.Disabled;
}
示例9: FromSPAGS
public FunctionDefinition FromSPAGS(SPAGS.Function spagsFunc)
{
FunctionDefinition jsFunc = new FunctionDefinition();
for (int i = 0; i < spagsFunc.ParameterVariables.Count; i++)
{
SPAGS.Parameter spagsParam = spagsFunc.ParameterVariables[i];
Variable p = new Variable(spagsParam.Name, GetValueTypes(spagsParam.Type));
AddReference(spagsParam, p);
jsFunc.Parameters.Add(p);
}
foreach (SPAGS.Statement statement in spagsFunc.Body.ChildStatements)
{
jsFunc.Body.Add(FromSPAGS(spagsFunc, statement, jsFunc.Body));
}
return jsFunc;
}
示例10: TestMul
public void TestMul()
{
using (var container = new Win64Container())
{
var floatType = container.VirtualMachine.TypeProvider.GetPrimitiveType(PrimitiveTypes.Float);
var funcDef = new FunctionDefinition("floatMain", new List<VMType>(), floatType);
var instructions = new List<Instruction>();
instructions.Add(new Instruction(OpCodes.LoadFloat, 2.5f));
instructions.Add(new Instruction(OpCodes.LoadFloat, 1.35f));
instructions.Add(new Instruction(OpCodes.MulFloat));
instructions.Add(new Instruction(OpCodes.Ret));
var func = new Function(funcDef, instructions, new List<VMType>());
container.LoadAssembly(Assembly.SingleFunction(func));
Assert.AreEqual(2.5f * 1.35f, ExecuteFloatProgram(container), 1E-4);
}
}
示例11: TestMul
public void TestMul()
{
using (var container = new Win64Container())
{
var intType = container.VirtualMachine.TypeProvider.GetPrimitiveType(PrimitiveTypes.Int);
var funcDef = new FunctionDefinition("main", new List<VMType>(), intType);
var instructions = new List<Instruction>();
instructions.Add(new Instruction(OpCodes.LoadInt, 2));
instructions.Add(new Instruction(OpCodes.LoadInt, 3));
instructions.Add(new Instruction(OpCodes.MulInt));
instructions.Add(new Instruction(OpCodes.Ret));
var func = new Function(funcDef, instructions, new List<VMType>());
container.LoadAssembly(Assembly.SingleFunction(func));
Assert.AreEqual(6, container.Execute());
}
}
示例12: TestFloatDefaultValue
public void TestFloatDefaultValue()
{
using (var container = new Win64Container())
{
var floatType = container.VirtualMachine.TypeProvider.GetPrimitiveType(PrimitiveTypes.Float);
var funcDef = new FunctionDefinition("floatMain", new List<VMType>(), floatType);
var instructions = new List<Instruction>();
instructions.Add(new Instruction(OpCodes.LoadLocal, 0));
instructions.Add(new Instruction(OpCodes.Ret));
var func = new Function(funcDef, instructions, Enumerable.Repeat(floatType, 1).ToList());
container.LoadAssembly(Assembly.SingleFunction(func));
container.VirtualMachine.Compile();
var mainFunc = Marshal.GetDelegateForFunctionPointer<FloatMain>(
container.VirtualMachine.Binder.GetFunction("floatMain()").EntryPoint);
Assert.AreEqual(0.0f, mainFunc());
}
}
示例13: DefinitionOrder
public void DefinitionOrder()
{
using (var container = new Win64Container())
{
var intType = container.VirtualMachine.TypeProvider.GetPrimitiveType(PrimitiveTypes.Int);
var assemblyFunctions = new List<Function>();
Action testFn = () =>
{
var def = new FunctionDefinition("test", new List<VMType>(), intType);
var instructions = new List<Instruction>();
instructions.Add(new Instruction(OpCodes.LoadInt, 1));
instructions.Add(new Instruction(OpCodes.LoadInt, 2));
instructions.Add(new Instruction(OpCodes.AddInt));
instructions.Add(new Instruction(OpCodes.Ret));
var func = new Function(def, instructions, new List<VMType>());
assemblyFunctions.Add(func);
};
Action mainFn = () =>
{
var def = new FunctionDefinition("main", new List<VMType>(), intType);
var instructions = new List<Instruction>();
instructions.Add(new Instruction(OpCodes.Call, "test", new List<VMType>()));
instructions.Add(new Instruction(OpCodes.Ret));
var func = new Function(def, instructions, new List<VMType>());
assemblyFunctions.Add(func);
};
mainFn();
testFn();
container.LoadAssembly(new Assembly(assemblyFunctions));
Assert.AreEqual(3, container.Execute());
}
}
示例14: CreateAddFunction
/// <summary>
/// Creates an add function with that takes the given amount of arguments
/// </summary>
private static Function CreateAddFunction(Win64Container container, int numArgs, bool optimize = false)
{
var intType = container.VirtualMachine.TypeProvider.GetPrimitiveType(PrimitiveTypes.Int);
var def = new FunctionDefinition("add", Enumerable.Repeat(intType, numArgs).ToList(), intType);
var instructions = new List<Instruction>();
instructions.Add(new Instruction(OpCodes.LoadArgument, 0));
for (int i = 1; i < numArgs; i++)
{
instructions.Add(new Instruction(OpCodes.LoadArgument, i));
instructions.Add(new Instruction(OpCodes.AddInt));
}
instructions.Add(new Instruction(OpCodes.Ret));
return new Function(def, instructions, new List<VMType>())
{
Optimize = optimize
};
}
示例15: dynFunction
public dynFunction(IEnumerable<string> inputs, IEnumerable<string> outputs, FunctionDefinition def)
: base(def.FunctionId.ToString())
{
_def = def;
//Set inputs and output
SetInputs(inputs);
foreach (var output in outputs)
OutPortData.Add(new PortData(output, "function output", typeof(object)));
//Setup double-click behavior
NodeUI.MouseDoubleClick += delegate
{
Controller.ViewCustomNodeWorkspace(_def);
};
((DropShadowEffect)NodeUI.elementRectangle.Effect).Opacity = 1;
((DropShadowEffect)NodeUI.elementRectangle.Effect).Color = Colors.WhiteSmoke;
((DropShadowEffect) NodeUI.elementRectangle.Effect).BlurRadius = 20;
((DropShadowEffect)NodeUI.elementRectangle.Effect).ShadowDepth = 0;
NodeUI.RegisterAllPorts();
}