public void CanInterceptGenericMethodWithConstraintRelatedToInterfaceOnGenericInterfaceWithConstraint()
        {
            IMethodInvocation invocation = null;

            var behavior = new DelegateInterceptionBehavior((inputs, getNext) =>
            {
                invocation = inputs;
                return(getNext()(inputs, getNext));
            });

            var instance =
                Intercept.NewInstance <GenericClassWithConstraint <IEnumerable> >(
                    new VirtualMethodInterceptor(),
                    new[] { behavior });

            instance.GenericMethodWithConstraintsOnTheInterfaceParameter <string>(null, null);

            Assert.IsNotNull(invocation);
            Assert.AreSame(typeof(string), ((MethodInfo)invocation.MethodBase).ReturnType);
            Assert.AreEqual(2, invocation.MethodBase.GetParameters().Count());
            Assert.AreSame(typeof(IEnumerable), invocation.MethodBase.GetParameters().ElementAt(0).ParameterType);
            Assert.AreSame(typeof(string), invocation.MethodBase.GetParameters().ElementAt(1).ParameterType);
        }
Esempio n. 2
0
    //decoration logic (UI logic) in general is always convoluted. Ugh
    public void Decorate(Command prior, Command current)
    {
        if (current.line != null)
        {
            current.line.gameObject.SetActive(entity.isSelected);
            if (prior == null)
            {
                current.line.SetPosition(0, entity.position);
            }
            else
            {
                current.line.SetPosition(0, prior.line.GetPosition(1));
            }

            if (current is Intercept)   //Most specific
            {
                Intercept intercept = current as Intercept;
                if (intercept.isRunning)//
                {
                    intercept.line.SetPosition(1, intercept.predictedMovePosition);
                }
                else
                {
                    intercept.line.SetPosition(1, intercept.targetEntity.position);
                }
                intercept.line.SetPosition(2, intercept.targetEntity.position);
            }
            else if (current is Follow)     // Less specific
            {
                Follow f = current as Follow;
                f.line.SetPosition(1, f.targetEntity.position + f.offset);
                f.line.SetPosition(2, f.targetEntity.position);
                //f.line.SetPosition(1, f.predictedMovePosition);
            } //Least specific
              //Moveposition never changes
        }
    }
Esempio n. 3
0
    /// <summary>
    /// 输入要漂浮的内容即可
    /// </summary>
    /// <param name="content">要漂浮显示的内容</param>
    public static void OutPutPiaofuAllPage(string content)
    {
        StringBuilder strHtml = new StringBuilder();

        #region 添加内容

        strHtml.Append("<div id=\"codefans_net\" style=\"position:absolute\">");
        strHtml.Append(content);
        strHtml.Append("</div>");

        #endregion
        strHtml.Append(" <script type=\"text/javascript\"> ");
        strHtml.Append(" var x = 50,y = 60; ");
        strHtml.Append(" var xin = true, yin = true; ");
        strHtml.Append(" var step = 1; ");
        strHtml.Append(" var delay = 10; ");
        strHtml.Append(" var obj=document.getElementById(\"codefans_net\"); ");
        strHtml.Append(" function float() { ");
        strHtml.Append(" var L=T=0 ;");
        strHtml.Append(" var R= document.body.clientWidth-obj.offsetWidth;  ");
        strHtml.Append(" var B = document.body.clientHeight-obj.offsetHeight;  ");
        strHtml.Append(" obj.style.left = x + document.body.scrollLeft ; ");
        strHtml.Append(" obj.style.top = y + document.body.scrollTop  ;");
        strHtml.Append(" x = x + step*(xin?1:-1) ; ");
        strHtml.Append(" if (x < L) { xin = true; x = L;}  ");
        strHtml.Append(" if (x > R){ xin = false; x = R;}  ");
        strHtml.Append(" y = y + step*(yin?1:-1);  ");
        strHtml.Append(" if (y < T) { yin = true; y = T ;}  ");
        strHtml.Append(" if (y > B) { yin = false; y = B ;}  ");
        strHtml.Append(" }  ");
        strHtml.Append(" var itl= setInterval(\"float()\", delay) ; ");
        strHtml.Append(" obj.onmouseover=function(){clearInterval(itl)};  ");
        strHtml.Append(" obj.onmouseout=function(){itl=setInterval(\"float()\", delay)};  ");
        strHtml.Append(" </script> ");
        Intercept.OutPutHtml(strHtml);
    }
Esempio n. 4
0
        public override void PostBuildUp(IBuilderContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            if (!(context.Existing is IInterceptingProxy))
            {
                var typeToIntercept = context.OriginalBuildKey.Type;

                // only intercept profiling for public interface types
                if (!typeToIntercept.IsInterface || typeToIntercept.IsNotPublic)
                {
                    return;
                }

                if (_filter != null && _filter.ShouldBeProfiled(typeToIntercept))
                {
                    context.Existing = Intercept.ThroughProxy(
                        typeToIntercept, context.Existing, new InterfaceInterceptor(), new[] { _deepProfilingBehavior });
                }
            }
        }
        public void CanInterceptVirtualMethodsOnGenericNestedClassInGenericClass()
        {
            IMethodInvocation invocation;

            var behavior = new DelegateInterceptionBehavior((inputs, getNext) =>
            {
                invocation = inputs;
                return(getNext()(inputs, getNext));
            });

            var instance =
                Intercept.NewInstance <GenericClassWithNestedGenericClass <BaseType> .GenericNestedClass <DerivedType> >(
                    new VirtualMethodInterceptor(),
                    new[] { behavior });


            invocation = null;

            instance.Test <List <DerivedType> >();

            Assert.IsNotNull(invocation);
            Assert.AreSame(typeof(List <DerivedType>[]), ((MethodInfo)invocation.MethodBase).ReturnType);
            Assert.AreEqual(0, invocation.MethodBase.GetParameters().Count());
        }
Esempio n. 6
0
        static void Main(string[] args)
        {
            Config = Config.LoadConfig();
            if (Config?.AutomaticallyCheckForUpdatesOnStartup ?? true)
            {
                UpdateChecker.CheckUpdateDialog(false);
            }

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            Form      = new Form1();
            Form_hWnd = Form.Handle;
            Form.SetAutomaticallyCheckUpdatesChecked(Config?.AutomaticallyCheckForUpdatesOnStartup ?? true);

            Options = new OptionsStructure();

            Core.Options.LoadOptions();

            SplitScreenManager = new SplitScreenManager();
            SplitScreenManager.Init();

            MessageProcessor = new MessageProcessor();

            i = new Intercept();
            var x = new RawInputManager(Form_hWnd);

            InputDisabler.Init();

            Application.Run(Form);            //Not required for RegisterRawInputDevices to work

            SplitScreenManager.DeactivateSplitScreen();

            Logger.WriteLine("Exiting application");
            Environment.Exit(0);
        }
Esempio n. 7
0
 public void RemoveEffect(Effect mod, Intercept intercept)
 {
     if(intercepts.ContainsKey(intercept))
         intercepts[intercept].Remove(mod);
 }
Esempio n. 8
0
 public void AddEffect(Effect mod, Intercept intercept)
 {
     if(!intercepts.ContainsKey(intercept))
         intercepts[intercept] = new List<Effect>();
     intercepts[intercept].Add(mod);
     // No-intercept mods are called immediately.
     if(intercept == Intercept.None)
         mod.Call(this, this, DamageType.Physical, 1f);
 }
Esempio n. 9
0
        private void button1_Click(object sender, EventArgs e)
        {
            zedGraphControl1.Visible = true;

            // Получим панель для рисования
            GraphPane pane = zedGraphControl1.GraphPane;

            // Очистим список кривых на тот случай, если до этого сигналы уже были нарисованы
            pane.CurveList.Clear();

            // Создадим список точек
            PointPairList list  = new PointPairList();
            PointPairList point = new PointPairList();

            try
            {
                AcceptInputValues();
            }
            catch (Exception ex)
            {
                MessageBox.Show(
                    ex.Message,
                    "Error",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Error,
                    MessageBoxDefaultButton.Button1
                    );

                return;
            }

            InputData.Compute_W();

            double[] xAxis = new double[InputData.X.Count - 1];
            double[] yAxis = new double[InputData.Y.Count - 1];

            for (int i = 0; i < InputData.X.Count; i++)
            {
                if (i < InputData.X.Count - 1)
                {
                    xAxis[i] = InputData.X[i];
                    yAxis[i] = InputData.Y[i];
                }
                else
                {
                    point.Add(InputData.X[i], InputData.Y[i]);
                }
            }

            list.Add(xAxis, yAxis);


            // Создадим кривую с названием "Sinc",
            // которая будет рисоваться голубым цветом (Color.Blue),
            // Опорные точки выделяться не будут (SymbolType.None)
            LineItem myCurve = pane.AddCurve("Sinc", list, Color.Blue, SymbolType.Diamond);
            LineItem Point   = pane.AddCurve("Point", point, Color.Brown, SymbolType.Square);

            Point.Line.IsVisible       = false;
            myCurve.Line.IsSmooth      = true;
            myCurve.Line.SmoothTension = 0.5F;
            // Вызываем метод AxisChange (), чтобы обновить данные об осях.
            // В противном случае на рисунке будет показана только часть графика,
            // которая умещается в интервалы по осям, установленные по умолчанию
            zedGraphControl1.GraphPane.AxisChange();

            // Обновляем график
            zedGraphControl1.Invalidate();

            Slope               = SlopeDefinition(xAxis, yAxis);
            Intercept           = InterceptDefinition(InputData.X[InputData.X.Count - 1], InputData.Y[InputData.Y.Count - 1], Slope);
            PotentialProduction = PotentialProductionDefinition(Slope, Intercept);

            slopeBox.Text         = Slope.ToString("0.00e+00");
            interceptBox.Text     = Intercept.ToString("f3");
            PotentialProdBox.Text = Math.Round(PotentialProduction).ToString();
        }
Esempio n. 10
0
 /// <summary>
 /// 包装实例, 以便提供直接拦截实例实现的多个接口方法, 不建议使用, 建议使用单一接口合并继承
 /// </summary>
 /// <typeparam name="T">实例</typeparam>
 public static T 接口拦截 <T>(T __实现, IEnumerable <Type> __additionalInterfaces, Func <MethodBase, object, object[], Tuple <object, object[]> > __action) where T : class
 {
     return(Intercept.ThroughProxyWithAdditionalInterfaces(__实现, new InterfaceInterceptor(), new IInterceptionBehavior[] { new LoggerBehavior(), new AdditionalInterfaceBehavior(__additionalInterfaces, __action) }, __additionalInterfaces));
 }
Esempio n. 11
0
 /// <summary>
 /// 运行方法(无返回值)。
 /// </summary>
 /// <param name="context">上下文。</param>
 /// <param name="intercept">拦截器。</param>
 public abstract void Run(InterceptContext context, Intercept intercept);
        private void button1_Click(object sender, EventArgs e)
        {
            if (temperatureBox1.Text == String.Empty)
            {
                MessageBox.Show(
                    "Please, select temperature reservoir",
                    "Warning",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information,
                    MessageBoxDefaultButton.Button1
                    );

                return;
            }

            try
            {
                AcceptInputValues();
            }
            catch (Exception ex)
            {
                MessageBox.Show(
                    ex.Message,
                    "Error",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Error,
                    MessageBoxDefaultButton.Button1
                    );

                return;
            }

            definitionOfZ.gazComposition.ComputeAll();
            definitionOfZ.ComputeAll();

            zedGraphControl1.Visible = true;

            // Получим панель для рисования
            GraphPane pane = zedGraphControl1.GraphPane;

            // Очистим список кривых на тот случай, если до этого сигналы уже были нарисованы
            pane.CurveList.Clear();

            // Создадим список точек
            PointPairList list = new PointPairList();

            //double xmin = InputData.GasExtraction.Min();  // 0
            //double xmax = InputData.GasExtraction.Max() + 100;

            double[] xAxis = InputData.GasExtraction.ToArray();
            double[] yAxis = definitionOfZ.P_z.ToArray();

            // добавим в список точки
            list.Add(xAxis, yAxis);

            // Создадим кривую с названием "Sinc",
            // которая будет рисоваться голубым цветом (Color.Blue),
            // Опорные точки выделяться не будут (SymbolType.None)
            LineItem myCurve = pane.AddCurve("Sinc", list, Color.Blue, SymbolType.Circle);

            myCurve.Line.IsSmooth      = true;
            myCurve.Line.SmoothTension = 0.5F;

            // Вызываем метод AxisChange (), чтобы обновить данные об осях.
            // В противном случае на рисунке будет показана только часть графика,
            // которая умещается в интервалы по осям, установленные по умолчанию
            zedGraphControl1.GraphPane.AxisChange();

            // Обновляем график
            zedGraphControl1.Invalidate();

            Slope              = SlopeDefinition(xAxis, yAxis);
            Intercept          = InterceptDefinition(xAxis, yAxis, Slope);
            InitialGasCapacity = InitialGasCapacityDefinition(Intercept, Slope);

            slopeBox.Text      = Slope.ToString("f3");
            interceptBox.Text  = Intercept.ToString("f3");
            initialGasBox.Text = Math.Round(InitialGasCapacity).ToString();
        }
Esempio n. 13
0
 public InterceptionLoggerProvider(Intercept interceptAction)
 {
     this.interceptAction = interceptAction;
 }
Esempio n. 14
0
 public static IDisposable SetInterceptionLogger(Intercept interceptAction)
 {
     InternalLoggerFactory.DefaultFactory.AddProvider(new InterceptionLoggerProvider(interceptAction));
     return(new Disposable(() => InternalLoggerFactory.DefaultFactory.AddProvider(new EventSourceLoggerProvider())));
 }
Esempio n. 15
0
 /// <summary>
 /// Creates an instance of TInterface.
 /// </summary>
 /// <returns></returns>
 public TInterface Create(IInstanceInterceptor instanceInterceptor, Type target, TInterceptionBehavior[] behaviors)
 {
     return((TInterface)Intercept.ThroughProxy(
                Activator.CreateInstance(target),
                instanceInterceptor, behaviors));
 }
Esempio n. 16
0
 /// <summary>
 /// Creates an instance of TInterface.
 /// </summary>
 /// <returns></returns>
 public TInterface Create(ITypeInterceptor typeInterceptor, TInterceptionBehavior[] behaviors)
 {
     return((TInterface)Intercept.NewInstance <object>(typeInterceptor, behaviors));
 }
Esempio n. 17
0
    // Can get a sequence of points as curves come to an intersection. Take the point
    // of closest approach.
    private List <Intercept> RemoveDuplicates(List <Intercept> intercepts, float deltaDistance, float deltaTime)
    {
        List <Intercept> unique = new List <Intercept>();

        List <Intercept>[] neighbours = new List <Intercept> [intercepts.Count];
        for (int i = 0; i < intercepts.Count; i++)
        {
            neighbours[i] = new List <Intercept>();
        }
        bool[] hasNeighbour = new bool[intercepts.Count];

        // idea: start at top, find all entries from there that are within
        // deltaDistance and deltaTime mark them as neighbours
        // Each neighbourhood contributes the closest approach to the unique list
        const float expandDelta = 3f;           // awkward fudge to gather a neighbourhood.

        // find neighbourhoods
        for (int i = 0; i < intercepts.Count; i++)
        {
            if (!hasNeighbour[i])
            {
                neighbours[i].Add(intercepts[i]);
                for (int j = i + 1; j < intercepts.Count; j++)
                {
                    if (!hasNeighbour[j])
                    {
                        // a neighbour of my neighbour is my...
                        Intercept toAdd = null;
                        foreach (Intercept intercept in neighbours[i])
                        {
                            if (Vector3.Distance(intercept.tp1.r, intercepts[j].tp1.r) < expandDelta * deltaDistance &&
                                (Mathf.Abs(intercept.tp1.t - intercepts[j].tp1.t) < deltaTime))
                            {
                                toAdd           = intercepts[j];
                                hasNeighbour[j] = true;
                                break;
                            }
                        }
                        if (toAdd != null)
                        {
                            neighbours[i].Add(toAdd);
                        }
                    }
                }
            }
        }
        // find closest pair in each neighbourhood
        foreach (List <Intercept> nList in neighbours)
        {
            if (nList.Count > 0)
            {
                Intercept intercept       = nList[0];
                float     closestDistance = nList[0].dR;
                for (int i = 1; i < nList.Count; i++)
                {
                    if (nList[i].dR < closestDistance)
                    {
                        closestDistance = nList[i].dR;
                        intercept       = nList[i];
                    }
                }
                unique.Add(intercept);
            }
        }
        return(unique);
    }
Esempio n. 18
0
        public async Task AgentPoolScanTest()
        {
            // Arrange
            var fixture = new Fixture();
            IEnumerable <AgentPoolInfo> pools = new[] {
                new AgentPoolInfo {
                    Name = "Some-Build-Azure-Linux", Id = 1
                },
                new AgentPoolInfo {
                    Name = "Some-Build-Azure-Linux-Canary", Id = 2
                },
                new AgentPoolInfo {
                    Name = "Some-Build-Azure-Linux-Fallback", Id = 3
                },
                new AgentPoolInfo {
                    Name = "Some-Build-Azure-Linux-Preview", Id = 4
                },
                new AgentPoolInfo {
                    Name = "Some-Build-Azure-Windows", Id = 5
                },
                new AgentPoolInfo {
                    Name = "Some-Build-Azure-Windows-Canary", Id = 6
                },
                new AgentPoolInfo {
                    Name = "Some-Build-Azure-Windows-Fallback", Id = 7
                },
                new AgentPoolInfo {
                    Name = "Some-Build-Azure-Windows-Preview", Id = 8
                },
                new AgentPoolInfo {
                    Name = "Some-Build-Azure-Windows-NOT-OBSERVED", Id = 9
                }
            };

            fixture.Customize <AgentStatus>(a => a.With(agent => agent.Status, "online"));

            var mockHttp = new MockHttpMessageHandler();

            mockHttp.When(HttpMethod.Get, "https://management.azure.com/subscriptions/f13f81f8-7578-4ca8-83f3-0a845fad3cb5/resourceGroups/*/providers/Microsoft.Compute/virtualMachineScaleSets/agents/virtualmachines/*/instanceView?api-version=2018-06-01")
            .Respond("application/json", "{ \"placementGroupId\": \"f79e82f0-3480-4eb3-a893-5cf9bd74daad\", \"platformUpdateDomain\": 0, \"platformFaultDomain\": 0, \"computerName\": \"agents2q3000000\", \"osName\": \"ubuntu\", \"osVersion\": \"18.04\", \"vmAgent\": { \"vmAgentVersion\": \"2.2.36\", \"statuses\": [ { \"code\": \"ProvisioningState/succeeded\", \"level\": \"Info\", \"displayStatus\": \"Ready\", \"message\": \"Guest Agent is running\", \"time\": \"2019-02-22T08:17:12+00:00\" } ], \"extensionHandlers\": [] }, \"disks\": [ { \"name\": \"agents_agents_0_OsDisk_1_d0e2afd2252041e98796d5ccdcf329d0\", \"statuses\": [ { \"code\": \"ProvisioningState/succeeded\", \"level\": \"Info\", \"displayStatus\": \"Provisioning succeeded\", \"time\": \"2019-02-22T08:16:59.1325957+00:00\" } ] }, { \"name\": \"agents_agents_0_OsDisk_1_3009fa8e43e144029be77cd72065f6df\", \"statuses\": [ { \"code\": \"ProvisioningState/deleting\", \"level\": \"Info\", \"displayStatus\": \"Deleting\" } ] } ], \"statuses\": [ { \"code\": \"ProvisioningState/updating\", \"level\": \"Info\", \"displayStatus\": \"Updating\" }, { \"code\": \"PowerState/running\", \"level\": \"Info\", \"displayStatus\": \"VM running\" } ] }");

            mockHttp.When(HttpMethod.Post, "https://management.azure.com/subscriptions/f13f81f8-7578-4ca8-83f3-0a845fad3cb5/resourceGroups/*/providers/Microsoft.Compute/virtualMachineScaleSets/agents/virtualmachines/*/reimage?api-version=2018-06-01")
            .Respond(HttpStatusCode.OK);

            var logAnalyticsClient = new Mock <ILogAnalyticsClient>();
            var tokenProvider      = new Intercept <AzureServiceTokenProvider>();
            var client             = new Mock <IRestClient>();

            client.Setup(x => x.Get(It.IsAny <IEnumerableRequest <AgentPoolInfo> >()))
            .Returns(pools);

            client.Setup(x => x.Get(It.IsAny <IEnumerableRequest <AgentStatus> >()))
            .Returns(fixture.CreateMany <AgentStatus>());


            // Act
            var function = new AgentPoolScanFunction(logAnalyticsClient.Object, client.Object, mockHttp.ToHttpClient(), tokenProvider);
            await function.Run(new TimerInfo(null, null), new Mock <ILogger>().Object);

            // Assert
            client
            .Verify(v => v.Get(It.IsAny <IEnumerableRequest <AgentPoolInfo> >()),
                    Times.Exactly(1));

            client
            .Verify(v => v.Get(It.IsAny <IEnumerableRequest <AgentStatus> >()),
                    Times.Exactly(8));

            logAnalyticsClient
            .Verify(x => x.AddCustomLogJsonAsync(It.IsAny <string>(), It.IsAny <object>(), It.IsAny <string>()),
                    Times.Exactly(1));
        }
Esempio n. 19
0
 /// <summary>
 /// 包装实例, 以便提供直接拦截继承MarshalByRefObject的实例或者拦截一个接口
 /// </summary>
 /// <typeparam name="T">实例</typeparam>
 public static T 透明拦截 <T>(T __实现) where T : class
 {
     return(Intercept.ThroughProxy(__实现, new TransparentProxyInterceptor(), new[] { new LoggerBehavior() }));
 }
Esempio n. 20
0
 /// <summary>
 /// 战前准备坐标设置
 /// </summary>
 /// <param name="ground"></param>
 public void SetPos(Button ground)
 {
     pos.x     = Intercept.getMe().GetPosForGroundName(ground.name, out y);
     pos.y     = y;
     battlePos = pos;
 }
Esempio n. 21
0
 public InterceptionLogger(string categoryName, Intercept interceptAction)
 {
     this.categoryName    = categoryName;
     this.interceptAction = interceptAction;
 }
Esempio n. 22
0
 private static Function[] ProduceFunctions()
 {
     Function[] retval = new Function[368];
     retval[0]                        = new Count();                            // COUNT
     retval[FunctionID.IF]            = new If();                               // IF
     retval[2]                        = LogicalFunction.ISNA;                   // IsNA
     retval[3]                        = LogicalFunction.ISERROR;                // IsERROR
     retval[FunctionID.SUM]           = AggregateFunction.SUM;                  // SUM
     retval[5]                        = AggregateFunction.AVERAGE;              // AVERAGE
     retval[6]                        = AggregateFunction.MIN;                  // MIN
     retval[7]                        = AggregateFunction.MAX;                  // MAX
     retval[8]                        = new Row();                              // ROW
     retval[9]                        = new Column();                           // COLUMN
     retval[10]                       = new Na();                               // NA
     retval[11]                       = new Npv();                              // NPV
     retval[12]                       = AggregateFunction.STDEV;                // STDEV
     retval[13]                       = NumericFunction.DOLLAR;                 // DOLLAR
     retval[14]                       = new Fixed();                            // FIXED
     retval[15]                       = NumericFunction.SIN;                    // SIN
     retval[16]                       = NumericFunction.COS;                    // COS
     retval[17]                       = NumericFunction.TAN;                    // TAN
     retval[18]                       = NumericFunction.ATAN;                   // ATAN
     retval[19]                       = new Pi();                               // PI
     retval[20]                       = NumericFunction.SQRT;                   // SQRT
     retval[21]                       = NumericFunction.EXP;                    // EXP
     retval[22]                       = NumericFunction.LN;                     // LN
     retval[23]                       = NumericFunction.LOG10;                  // LOG10
     retval[24]                       = NumericFunction.ABS;                    // ABS
     retval[25]                       = NumericFunction.INT;                    // INT
     retval[26]                       = NumericFunction.SIGN;                   // SIGN
     retval[27]                       = NumericFunction.ROUND;                  // ROUND
     retval[28]                       = new Lookup();                           // LOOKUP
     retval[29]                       = new Index();                            // INDEX
     retval[30]                       = new Rept();                             // REPT
     retval[31]                       = TextFunction.MID;                       // MID
     retval[32]                       = TextFunction.LEN;                       // LEN
     retval[33]                       = new Value();                            // VALUE
     retval[34]                       = new True();                             // TRUE
     retval[35]                       = new False();                            // FALSE
     retval[36]                       = new And();                              // AND
     retval[37]                       = new Or();                               // OR
     retval[38]                       = new Not();                              // NOT
     retval[39]                       = NumericFunction.MOD;                    // MOD
     retval[40]                       = new NotImplementedFunction("DCOUNT");   // DCOUNT
     retval[41]                       = new NotImplementedFunction("DSUM");     // DSUM
     retval[42]                       = new NotImplementedFunction("DAVERAGE"); // DAVERAGE
     retval[43]                       = new DStarRunner(new DMin());            // DMIN
     retval[44]                       = new NotImplementedFunction("DMAX");     // DMAX
     retval[45]                       = new NotImplementedFunction("DSTDEV");   // DSTDEV
     retval[46]                       = AggregateFunction.VAR;                  // VAR
     retval[47]                       = new NotImplementedFunction("DVAR");     // DVAR
     retval[48]                       = TextFunction.TEXT;                      // TEXT
     retval[49]                       = new NotImplementedFunction("LINEST");   // LINEST
     retval[50]                       = new NotImplementedFunction("TREND");    // TREND
     retval[51]                       = new NotImplementedFunction("LOGEST");   // LOGEST
     retval[52]                       = new NotImplementedFunction("GROWTH");   // GROWTH
     retval[53]                       = new NotImplementedFunction("GOTO");     // GOTO
     retval[54]                       = new NotImplementedFunction("HALT");     // HALT
     retval[56]                       = FinanceFunction.PV;                     // PV
     retval[57]                       = FinanceFunction.FV;                     // FV
     retval[58]                       = FinanceFunction.NPER;                   // NPER
     retval[59]                       = FinanceFunction.PMT;                    // PMT
     retval[60]                       = new Rate();                             // RATE
     retval[61]                       = new Mirr();                             // MIRR
     retval[62]                       = new Irr();                              // IRR
     retval[63]                       = new Rand();                             // RAND
     retval[64]                       = new Match();                            // MATCH
     retval[65]                       = DateFunc.instance;                      // DATE
     retval[66]                       = new TimeFunc();                         // TIME
     retval[67]                       = CalendarFieldFunction.DAY;              // DAY
     retval[68]                       = CalendarFieldFunction.MONTH;            // MONTH
     retval[69]                       = CalendarFieldFunction.YEAR;             // YEAR
     retval[70]                       = WeekdayFunc.instance;                   // WEEKDAY
     retval[71]                       = CalendarFieldFunction.HOUR;
     retval[72]                       = CalendarFieldFunction.MINUTE;
     retval[73]                       = CalendarFieldFunction.SECOND;
     retval[74]                       = new Now();
     retval[75]                       = new NotImplementedFunction("AREAS");         // AREAS
     retval[76]                       = new Rows();                                  // ROWS
     retval[77]                       = new Columns();                               // COLUMNS
     retval[FunctionID.OFFSET]        = new Offset();                                // Offset.Evaluate has a different signature
     retval[79]                       = new NotImplementedFunction("ABSREF");        // ABSREF
     retval[80]                       = new NotImplementedFunction("RELREF");        // RELREF
     retval[81]                       = new NotImplementedFunction("ARGUMENT");      // ARGUMENT
     retval[82]                       = TextFunction.SEARCH;
     retval[83]                       = new NotImplementedFunction("TRANSPOSE");     // TRANSPOSE
     retval[84]                       = new NotImplementedFunction("ERROR");         // ERROR
     retval[85]                       = new NotImplementedFunction("STEP");          // STEP
     retval[86]                       = new NotImplementedFunction("TYPE");          // TYPE
     retval[87]                       = new NotImplementedFunction("ECHO");          // ECHO
     retval[88]                       = new NotImplementedFunction("SetNAME");       // SetNAME
     retval[89]                       = new NotImplementedFunction("CALLER");        // CALLER
     retval[90]                       = new NotImplementedFunction("DEREF");         // DEREF
     retval[91]                       = new NotImplementedFunction("WINDOWS");       // WINDOWS
     retval[92]                       = new NotImplementedFunction("SERIES");        // SERIES
     retval[93]                       = new NotImplementedFunction("DOCUMENTS");     // DOCUMENTS
     retval[94]                       = new NotImplementedFunction("ACTIVECELL");    // ACTIVECELL
     retval[95]                       = new NotImplementedFunction("SELECTION");     // SELECTION
     retval[96]                       = new NotImplementedFunction("RESULT");        // RESULT
     retval[97]                       = NumericFunction.ATAN2;                       // ATAN2
     retval[98]                       = NumericFunction.ASIN;                        // ASIN
     retval[99]                       = NumericFunction.ACOS;                        // ACOS
     retval[FunctionID.CHOOSE]        = new Choose();
     retval[101]                      = new Hlookup();                               // HLOOKUP
     retval[102]                      = new Vlookup();                               // VLOOKUP
     retval[103]                      = new NotImplementedFunction("LINKS");         // LINKS
     retval[104]                      = new NotImplementedFunction("INPUT");         // INPUT
     retval[105]                      = LogicalFunction.ISREF;                       // IsREF
     retval[106]                      = new NotImplementedFunction("GetFORMULA");    // GetFORMULA
     retval[107]                      = new NotImplementedFunction("GetNAME");       // GetNAME
     retval[108]                      = new NotImplementedFunction("SetVALUE");      // SetVALUE
     retval[109]                      = NumericFunction.LOG;                         // LOG
     retval[110]                      = new NotImplementedFunction("EXEC");          // EXEC
     retval[111]                      = TextFunction.CHAR;                           // CHAR
     retval[112]                      = TextFunction.LOWER;                          // LOWER
     retval[113]                      = TextFunction.UPPER;                          // UPPER
     retval[114]                      = TextFunction.PROPER;                         // PROPER
     retval[115]                      = TextFunction.LEFT;                           // LEFT
     retval[116]                      = TextFunction.RIGHT;                          // RIGHT
     retval[117]                      = TextFunction.EXACT;                          // EXACT
     retval[118]                      = TextFunction.TRIM;                           // TRIM
     retval[119]                      = new Replace();                               // Replace
     retval[120]                      = new Substitute();                            // SUBSTITUTE
     retval[121]                      = new Code();                                  // CODE
     retval[122]                      = new NotImplementedFunction("NAMES");         // NAMES
     retval[123]                      = new NotImplementedFunction("DIRECTORY");     // DIRECTORY
     retval[124]                      = TextFunction.FIND;                           // Find
     retval[125]                      = new NotImplementedFunction("CELL");          // CELL
     retval[126]                      = LogicalFunction.ISERR;                       // IsERR
     retval[127]                      = LogicalFunction.ISTEXT;                      // IsTEXT
     retval[128]                      = LogicalFunction.ISNUMBER;                    // IsNUMBER
     retval[129]                      = LogicalFunction.ISBLANK;                     // IsBLANK
     retval[130]                      = new T();                                     // T
     retval[131]                      = new NotImplementedFunction("N");             // N
     retval[132]                      = new NotImplementedFunction("FOPEN");         // FOPEN
     retval[133]                      = new NotImplementedFunction("FCLOSE");        // FCLOSE
     retval[134]                      = new NotImplementedFunction("FSIZE");         // FSIZE
     retval[135]                      = new NotImplementedFunction("FReadLN");       // FReadLN
     retval[136]                      = new NotImplementedFunction("FRead");         // FRead
     retval[137]                      = new NotImplementedFunction("FWriteLN");      // FWriteLN
     retval[138]                      = new NotImplementedFunction("FWrite");        // FWrite
     retval[139]                      = new NotImplementedFunction("FPOS");          // FPOS
     retval[140]                      = new NotImplementedFunction("DATEVALUE");     // DATEVALUE
     retval[141]                      = new NotImplementedFunction("TIMEVALUE");     // TIMEVALUE
     retval[142]                      = new NotImplementedFunction("SLN");           // SLN
     retval[143]                      = new NotImplementedFunction("SYD");           // SYD
     retval[144]                      = new NotImplementedFunction("DDB");           // DDB
     retval[145]                      = new NotImplementedFunction("GetDEF");        // GetDEF
     retval[146]                      = new NotImplementedFunction("REFTEXT");       // REFTEXT
     retval[147]                      = new NotImplementedFunction("TEXTREF");       // TEXTREF
     retval[FunctionID.INDIRECT]      = null;                                        // Indirect.Evaluate has different signature
     retval[149]                      = new NotImplementedFunction("REGISTER");      // REGISTER
     retval[150]                      = new NotImplementedFunction("CALL");          // CALL
     retval[151]                      = new NotImplementedFunction("AddBAR");        // AddBAR
     retval[152]                      = new NotImplementedFunction("AddMENU");       // AddMENU
     retval[153]                      = new NotImplementedFunction("AddCOMMAND");    // AddCOMMAND
     retval[154]                      = new NotImplementedFunction("ENABLECOMMAND"); // ENABLECOMMAND
     retval[155]                      = new NotImplementedFunction("CHECKCOMMAND");  // CHECKCOMMAND
     retval[156]                      = new NotImplementedFunction("RenameCOMMAND"); // RenameCOMMAND
     retval[157]                      = new NotImplementedFunction("SHOWBAR");       // SHOWBAR
     retval[158]                      = new NotImplementedFunction("DELETEMENU");    // DELETEMENU
     retval[159]                      = new NotImplementedFunction("DELETECOMMAND"); // DELETECOMMAND
     retval[160]                      = new NotImplementedFunction("GetCHARTITEM");  // GetCHARTITEM
     retval[161]                      = new NotImplementedFunction("DIALOGBOX");     // DIALOGBOX
     retval[162]                      = TextFunction.CLEAN;                          // CLEAN
     retval[163]                      = new NotImplementedFunction("MDETERM");       // MDETERM
     retval[164]                      = new NotImplementedFunction("MINVERSE");      // MINVERSE
     retval[165]                      = new NotImplementedFunction("MMULT");         // MMULT
     retval[166]                      = new NotImplementedFunction("FILES");         // FILES
     retval[167]                      = new IPMT();
     retval[168]                      = new PPMT();
     retval[169]                      = new Counta();                                 // COUNTA
     retval[170]                      = new NotImplementedFunction("CANCELKEY");      // CANCELKEY
     retval[175]                      = new NotImplementedFunction("INITIATE");       // INITIATE
     retval[176]                      = new NotImplementedFunction("REQUEST");        // REQUEST
     retval[177]                      = new NotImplementedFunction("POKE");           // POKE
     retval[178]                      = new NotImplementedFunction("EXECUTE");        // EXECUTE
     retval[179]                      = new NotImplementedFunction("TERMINATE");      // TERMINATE
     retval[180]                      = new NotImplementedFunction("RESTART");        // RESTART
     retval[181]                      = new NotImplementedFunction("HELP");           // HELP
     retval[182]                      = new NotImplementedFunction("GetBAR");         // GetBAR
     retval[183]                      = AggregateFunction.PRODUCT;                    // PRODUCT
     retval[184]                      = NumericFunction.FACT;                         // FACT
     retval[185]                      = new NotImplementedFunction("GetCELL");        // GetCELL
     retval[186]                      = new NotImplementedFunction("GetWORKSPACE");   // GetWORKSPACE
     retval[187]                      = new NotImplementedFunction("GetWINDOW");      // GetWINDOW
     retval[188]                      = new NotImplementedFunction("GetDOCUMENT");    // GetDOCUMENT
     retval[189]                      = new NotImplementedFunction("DPRODUCT");       // DPRODUCT
     retval[190]                      = LogicalFunction.ISNONTEXT;                    // IsNONTEXT
     retval[191]                      = new NotImplementedFunction("GetNOTE");        // GetNOTE
     retval[192]                      = new NotImplementedFunction("NOTE");           // NOTE
     retval[193]                      = new NotImplementedFunction("STDEVP");         // STDEVP
     retval[194]                      = AggregateFunction.VARP;                       // VARP
     retval[195]                      = new NotImplementedFunction("DSTDEVP");        // DSTDEVP
     retval[196]                      = new NotImplementedFunction("DVARP");          // DVARP
     retval[197]                      = NumericFunction.TRUNC;                        // TRUNC
     retval[198]                      = LogicalFunction.ISLOGICAL;                    // IsLOGICAL
     retval[199]                      = new NotImplementedFunction("DCOUNTA");        // DCOUNTA
     retval[200]                      = new NotImplementedFunction("DELETEBAR");      // DELETEBAR
     retval[201]                      = new NotImplementedFunction("UNREGISTER");     // UNREGISTER
     retval[204]                      = new NotImplementedFunction("USDOLLAR");       // USDOLLAR
     retval[205]                      = new NotImplementedFunction("FindB");          // FindB
     retval[206]                      = new NotImplementedFunction("SEARCHB");        // SEARCHB
     retval[207]                      = new NotImplementedFunction("ReplaceB");       // ReplaceB
     retval[208]                      = new NotImplementedFunction("LEFTB");          // LEFTB
     retval[209]                      = new NotImplementedFunction("RIGHTB");         // RIGHTB
     retval[210]                      = new NotImplementedFunction("MIDB");           // MIDB
     retval[211]                      = new NotImplementedFunction("LENB");           // LENB
     retval[212]                      = NumericFunction.ROUNDUP;                      // ROUNDUP
     retval[213]                      = NumericFunction.ROUNDDOWN;                    // ROUNDDOWN
     retval[214]                      = new NotImplementedFunction("ASC");            // ASC
     retval[215]                      = new NotImplementedFunction("DBCS");           // DBCS
     retval[216]                      = new Rank();                                   // RANK
     retval[219]                      = new Address();                                // AddRESS
     retval[220]                      = new Days360();                                // DAYS360
     retval[221]                      = new Today();                                  // TODAY
     retval[222]                      = new NotImplementedFunction("VDB");            // VDB
     retval[227]                      = AggregateFunction.MEDIAN;                     // MEDIAN
     retval[228]                      = new Sumproduct();                             // SUMPRODUCT
     retval[229]                      = NumericFunction.SINH;                         // SINH
     retval[230]                      = NumericFunction.COSH;                         // COSH
     retval[231]                      = NumericFunction.TANH;                         // TANH
     retval[232]                      = NumericFunction.ASINH;                        // ASINH
     retval[233]                      = NumericFunction.ACOSH;                        // ACOSH
     retval[234]                      = NumericFunction.ATANH;                        // ATANH
     retval[235]                      = new DStarRunner(new DGet());                  // DGet
     retval[236]                      = new NotImplementedFunction("CreateOBJECT");   // CreateOBJECT
     retval[237]                      = new NotImplementedFunction("VOLATILE");       // VOLATILE
     retval[238]                      = new NotImplementedFunction("LASTERROR");      // LASTERROR
     retval[239]                      = new NotImplementedFunction("CUSTOMUNDO");     // CUSTOMUNDO
     retval[240]                      = new NotImplementedFunction("CUSTOMREPEAT");   // CUSTOMREPEAT
     retval[241]                      = new NotImplementedFunction("FORMULAConvert"); // FORMULAConvert
     retval[242]                      = new NotImplementedFunction("GetLINKINFO");    // GetLINKINFO
     retval[243]                      = new NotImplementedFunction("TEXTBOX");        // TEXTBOX
     retval[244]                      = new NotImplementedFunction("INFO");           // INFO
     retval[245]                      = new NotImplementedFunction("GROUP");          // GROUP
     retval[246]                      = new NotImplementedFunction("GetOBJECT");      // GetOBJECT
     retval[247]                      = new NotImplementedFunction("DB");             // DB
     retval[248]                      = new NotImplementedFunction("PAUSE");          // PAUSE
     retval[250]                      = new NotImplementedFunction("RESUME");         // RESUME
     retval[252]                      = new NotImplementedFunction("FREQUENCY");      // FREQUENCY
     retval[253]                      = new NotImplementedFunction("AddTOOLBAR");     // AddTOOLBAR
     retval[254]                      = new NotImplementedFunction("DELETETOOLBAR");  // DELETETOOLBAR
     retval[FunctionID.EXTERNAL_FUNC] = null;                                         // ExternalFunction is a FreeREfFunction
     retval[256]                      = new NotImplementedFunction("RESetTOOLBAR");   // RESetTOOLBAR
     retval[257]                      = new NotImplementedFunction("EVALUATE");       // EVALUATE
     retval[258]                      = new NotImplementedFunction("GetTOOLBAR");     // GetTOOLBAR
     retval[259]                      = new NotImplementedFunction("GetTOOL");        // GetTOOL
     retval[260]                      = new NotImplementedFunction("SPELLINGCHECK");  // SPELLINGCHECK
     retval[261]                      = new Errortype();                              // ERRORTYPE
     retval[262]                      = new NotImplementedFunction("APPTITLE");       // APPTITLE
     retval[263]                      = new NotImplementedFunction("WINDOWTITLE");    // WINDOWTITLE
     retval[264]                      = new NotImplementedFunction("SAVETOOLBAR");    // SAVETOOLBAR
     retval[265]                      = new NotImplementedFunction("ENABLETOOL");     // ENABLETOOL
     retval[266]                      = new NotImplementedFunction("PRESSTOOL");      // PRESSTOOL
     retval[267]                      = new NotImplementedFunction("REGISTERID");     // REGISTERID
     retval[268]                      = new NotImplementedFunction("GetWORKBOOK");    // GetWORKBOOK
     retval[269]                      = AggregateFunction.AVEDEV;                     // AVEDEV
     retval[270]                      = new NotImplementedFunction("BETADIST");       // BETADIST
     retval[271]                      = new NotImplementedFunction("GAMMALN");        // GAMMALN
     retval[272]                      = new NotImplementedFunction("BETAINV");        // BETAINV
     retval[273]                      = new NotImplementedFunction("BINOMDIST");      // BINOMDIST
     retval[274]                      = new NotImplementedFunction("CHIDIST");        // CHIDIST
     retval[275]                      = new NotImplementedFunction("CHIINV");         // CHIINV
     retval[276]                      = NumericFunction.COMBIN;                       // COMBIN
     retval[277]                      = new NotImplementedFunction("CONFIDENCE");     // CONFIDENCE
     retval[278]                      = new NotImplementedFunction("CRITBINOM");      // CRITBINOM
     retval[279]                      = new Even();                                   // EVEN
     retval[280]                      = new NotImplementedFunction("EXPONDIST");      // EXPONDIST
     retval[281]                      = new NotImplementedFunction("FDIST");          // FDIST
     retval[282]                      = new NotImplementedFunction("FINV");           // FINV
     retval[283]                      = new NotImplementedFunction("FISHER");         // FISHER
     retval[284]                      = new NotImplementedFunction("FISHERINV");      // FISHERINV
     retval[285]                      = NumericFunction.FLOOR;                        // FLOOR
     retval[286]                      = new NotImplementedFunction("GAMMADIST");      // GAMMADIST
     retval[287]                      = new NotImplementedFunction("GAMMAINV");       // GAMMAINV
     retval[288]                      = NumericFunction.CEILING;                      // CEILING
     retval[289]                      = new NotImplementedFunction("HYPGEOMDIST");    // HYPGEOMDIST
     retval[290]                      = new NotImplementedFunction("LOGNORMDIST");    // LOGNORMDIST
     retval[291]                      = new NotImplementedFunction("LOGINV");         // LOGINV
     retval[292]                      = new NotImplementedFunction("NEGBINOMDIST");   // NEGBINOMDIST
     retval[293]                      = new NotImplementedFunction("NORMDIST");       // NORMDIST
     retval[294]                      = new NotImplementedFunction("NORMSDIST");      // NORMSDIST
     retval[295]                      = new NotImplementedFunction("NORMINV");        // NORMINV
     retval[296]                      = new NotImplementedFunction("NORMSINV");       // NORMSINV
     retval[297]                      = new NotImplementedFunction("STANDARDIZE");    // STANDARDIZE
     retval[298]                      = new Odd();                                    // ODD
     retval[299]                      = new NotImplementedFunction("PERMUT");         // PERMUT
     retval[300]                      = NumericFunction.POISSON;                      // POISSON
     retval[301]                      = new NotImplementedFunction("TDIST");          // TDIST
     retval[302]                      = new NotImplementedFunction("WEIBULL");        // WEIBULL
     retval[303]                      = new Sumxmy2();                                // SUMXMY2
     retval[304]                      = new Sumx2my2();                               // SUMX2MY2
     retval[305]                      = new Sumx2py2();                               // SUMX2PY2
     retval[306]                      = new NotImplementedFunction("CHITEST");        // CHITEST
     retval[307]                      = new NotImplementedFunction("CORREL");         // CORREL
     retval[308]                      = new NotImplementedFunction("COVAR");          // COVAR
     retval[309]                      = new NotImplementedFunction("FORECAST");       // FORECAST
     retval[310]                      = new NotImplementedFunction("FTEST");          // FTEST
     retval[311]                      = new Intercept();                              // INTERCEPT
     retval[312]                      = new NotImplementedFunction("PEARSON");        // PEARSON
     retval[313]                      = new NotImplementedFunction("RSQ");            // RSQ
     retval[314]                      = new NotImplementedFunction("STEYX");          // STEYX
     retval[315]                      = new Slope();                                  // SLOPE
     retval[316]                      = new NotImplementedFunction("TTEST");          // TTEST
     retval[317]                      = new NotImplementedFunction("PROB");           // PROB
     retval[318]                      = AggregateFunction.DEVSQ;                      // DEVSQ
     retval[319]                      = new NotImplementedFunction("GEOMEAN");        // GEOMEAN
     retval[320]                      = new NotImplementedFunction("HARMEAN");        // HARMEAN
     retval[321]                      = AggregateFunction.SUMSQ;                      // SUMSQ
     retval[322]                      = new NotImplementedFunction("KURT");           // KURT
     retval[323]                      = new NotImplementedFunction("SKEW");           // SKEW
     retval[324]                      = new NotImplementedFunction("ZTEST");          // ZTEST
     retval[325]                      = AggregateFunction.LARGE;                      // LARGE
     retval[326]                      = AggregateFunction.SMALL;                      // SMALL
     retval[327]                      = new NotImplementedFunction("QUARTILE");       // QUARTILE
     retval[328]                      = AggregateFunction.PERCENTILE;                 // PERCENTILE
     retval[329]                      = new NotImplementedFunction("PERCENTRANK");    // PERCENTRANK
     retval[330]                      = new Mode();                                   // MODE
     retval[331]                      = new NotImplementedFunction("TRIMMEAN");       // TRIMMEAN
     retval[332]                      = new NotImplementedFunction("TINV");           // TINV
     retval[334]                      = new NotImplementedFunction("MOVIECOMMAND");   // MOVIECOMMAND
     retval[335]                      = new NotImplementedFunction("GetMOVIE");       // GetMOVIE
     retval[336]                      = TextFunction.CONCATENATE;                     // CONCATENATE
     retval[337]                      = NumericFunction.POWER;                        // POWER
     retval[338]                      = new NotImplementedFunction("PIVOTAddDATA");   // PIVOTAddDATA
     retval[339]                      = new NotImplementedFunction("GetPIVOTTABLE");  // GetPIVOTTABLE
     retval[340]                      = new NotImplementedFunction("GetPIVOTFIELD");  // GetPIVOTFIELD
     retval[341]                      = new NotImplementedFunction("GetPIVOTITEM");   // GetPIVOTITEM
     retval[342]                      = NumericFunction.RADIANS;
     ;                                                                                // RADIANS
     retval[343] = NumericFunction.DEGREES;                                           // DEGREES
     retval[344] = new Subtotal();                                                    // SUBTOTAL
     retval[345] = new Sumif();                                                       // SUMIF
     retval[346] = new Countif();                                                     // COUNTIF
     retval[347] = new Countblank();                                                  // COUNTBLANK
     retval[348] = new NotImplementedFunction("SCENARIOGet");                         // SCENARIOGet
     retval[349] = new NotImplementedFunction("OPTIONSLISTSGet");                     // OPTIONSLISTSGet
     retval[350] = new NotImplementedFunction("IsPMT");                               // IsPMT
     retval[351] = new NotImplementedFunction("DATEDIF");                             // DATEDIF
     retval[352] = new NotImplementedFunction("DATESTRING");                          // DATESTRING
     retval[353] = new NotImplementedFunction("NUMBERSTRING");                        // NUMBERSTRING
     retval[354] = new Roman();                                                       // ROMAN
     retval[355] = new NotImplementedFunction("OPENDIALOG");                          // OPENDIALOG
     retval[356] = new NotImplementedFunction("SAVEDIALOG");                          // SAVEDIALOG
     retval[357] = new NotImplementedFunction("VIEWGet");                             // VIEWGet
     retval[358] = new NotImplementedFunction("GetPIVOTDATA");                        // GetPIVOTDATA
     retval[359] = new Hyperlink();                                                   // HYPERLINK
     retval[360] = new NotImplementedFunction("PHONETIC");                            // PHONETIC
     retval[361] = new NotImplementedFunction("AVERAGEA");                            // AVERAGEA
     retval[362] = new Maxa();                                                        // MAXA
     retval[363] = new Mina();                                                        // MINA
     retval[364] = new NotImplementedFunction("STDEVPA");                             // STDEVPA
     retval[365] = new NotImplementedFunction("VARPA");                               // VARPA
     retval[366] = new NotImplementedFunction("STDEVA");                              // STDEVA
     retval[367] = new NotImplementedFunction("VARA");                                // VARA
     return(retval);
 }
Esempio n. 23
0
        public static void EntitiesContextInitialization <T>() where T : EntitiesContext
        {
            if (_contexts.Value.FirstOrDefault(c => c.Name == (typeof(T).Name)).IsNull())
            {
                string sessionid = MVCEngine.Tools.Session.Session.CreateUserSession(typeof(T).Name);
                Task   task      = new Task(() =>
                {
                    Dictionary <MVCEngine.Model.Internal.Descriptions.DynamicProperties, string[]> dynamicList =
                        new Dictionary <MVCEngine.Model.Internal.Descriptions.DynamicProperties, string[]>();
                    Context ctx = new Context()
                    {
                        Name    = typeof(T).Name,
                        Entites = new List <EntityClass>()
                    };
                    _contexts.Value.Add(ctx);
                    _entitiesCollection.Value.Add(ctx.Name, new Dictionary <string, Func <object, object> >());

                    typeof(T).GetFields().Where(f => f.FieldType.Name == "EntitiesCollection`1" && f.IsPublic).
                    ToList().ForEach((f) =>
                    {
                        List <string> realTimeValidator = new List <string>();
                        PropertyInfo ctxInfo            = f.FieldType.GetProperty("Context");
                        Type entityType = f.FieldType.GetGenericArguments().First <Type>();
                        Debug.Assert(typeof(Entity).IsAssignableFrom(entityType), "Entity[" + entityType.FullName + "] it cann't be recognise as valid entity.");
                        if (typeof(Entity).IsAssignableFrom(entityType))
                        {
                            if (!_entites.Value.ContainsKey(entityType.FullName))
                            {
                                EntityClass entityClass = new EntityClass();
                                Debug.Assert(!ctx.Entites.Exists((t) => { return(t.Name == entityType.Name); }), "Entity[" + entityType.Name + "] is defined twice.");
                                if (!ctx.Entites.Exists((t) => { return(t.Name == entityType.Name); }))
                                {
                                    entityClass.Name       = entityType.Name;
                                    entityClass.EntityType = entityType;
                                    entityClass.Attributes.AddRange(Attribute.GetCustomAttributes(entityType));

                                    _entitiesCollection.Value[ctx.Name].Add(entityType.Name, LambdaTools.FieldGetter(typeof(T), f));

                                    var propertyquery = entityType.GetProperties().Where(p => p.CanRead && p.GetGetMethod().IsVirtual);
                                    propertyquery.ToList().ForEach((p) =>
                                    {
                                        EntityProperty property = new EntityProperty()
                                        {
                                            Name         = p.Name,
                                            PropertyType = p.PropertyType,
                                            PropertyInfo = p,
                                            Setter       = p.CanWrite ? LambdaTools.PropertySetter(entityType, p) : null,
                                            Getter       = LambdaTools.PropertyGetter(entityType, p)
                                        };
                                        property.Attibutes.AddRange(Attribute.GetCustomAttributes(p));
                                        entityClass.Properties.Add(property);

                                        if (typeof(Entity).IsAssignableFrom(p.PropertyType))
                                        {
                                            property.ReletedEntity = new ReletedEntity()
                                            {
                                                Related           = Releted.Entity,
                                                RelatedEntityName = p.PropertyType.Name
                                            };
                                        }
                                        else if (p.PropertyType.Name == "EntitiesCollection`1")
                                        {
                                            property.ReletedEntity = new ReletedEntity()
                                            {
                                                Related           = Releted.List,
                                                RelatedEntityName = p.PropertyType.GetGenericArguments().First <Type>().Name
                                            };
                                        }
                                        Attribute.GetCustomAttributes(p).ToList().ForEach((a) =>
                                        {
                                            Relation relation           = null;
                                            Discriminator discriminator = null;
                                            PropertyValidator validator = null;
                                            DefaultValue defaultValue   = null;
                                            Synchronized synchronized   = null;
                                            Formatter formatter         = null;
                                            NotIntercept notIntercept   = null;
                                            Intercept intercept         = null;
                                            attribute.DynamicProperties dynamicProperties = null;
                                            if (a.IsTypeOf <PrimaryKey>())
                                            {
                                                Debug.Assert(entityClass.Properties.FirstOrDefault(primary => primary.PrimaryKey).IsNull(), "Entity[" + entityType.Name + "] at least two primary key property defined");
                                                property.PrimaryKey            = true;
                                                entityClass.PrimaryKeyProperty = property;
                                                entityClass.PrimaryKey         = property.Getter;
                                            }
                                            else if ((relation = a.CastToType <Relation>()).IsNotNull())
                                            {
                                                EntitiesRelation r = ctx.Relations.FirstOrDefault(re => re.Name == relation.RelationName);
                                                Debug.Assert(r.IsNull(), "Relation[" + relation.RelationName + "] is declared at least twice");
                                                if (property.ReletedEntity.IsNotNull())
                                                {
                                                    EntitiesRelation entityrelation = new EntitiesRelation()
                                                    {
                                                        Name   = relation.RelationName,
                                                        Parent = new EntityRelated()
                                                        {
                                                            EntityName = relation.ParentEntity,
                                                            Key        = relation.ParentProperty
                                                        },
                                                        Child = new EntityRelated()
                                                        {
                                                            EntityName = relation.ChildEntity,
                                                            Key        = relation.ChildProperty
                                                        },
                                                        OnDelete = relation.OnDelete,
                                                        OnAccept = relation.OnAccept,
                                                        OnFreeze = relation.OnFreeze
                                                    };
                                                    ctx.Relations.Add(entityrelation);
                                                    property.ReletedEntity.Relation = entityrelation;
                                                }
                                            }
                                            else if ((synchronized = a.CastToType <Synchronized>()).IsNotNull())
                                            {
                                                if (property.ReletedEntity.IsNotNull())
                                                {
                                                    property.ReletedEntity.Synchronized = true;
                                                }
                                            }
                                            else if ((discriminator = a.CastToType <Discriminator>()).IsNotNull())
                                            {
                                                if (property.ReletedEntity.IsNotNull())
                                                {
                                                    property.ReletedEntity.Discriminators.Add(discriminator);
                                                }
                                            }
                                            else if ((validator = a.CastToType <PropertyValidator>()).IsNotNull())
                                            {
                                                property.Validators.Add(validator);
                                            }
                                            else if ((defaultValue = a.CastToType <DefaultValue>()).IsNotNull())
                                            {
                                                property.DefaultValue = defaultValue;
                                            }
                                            else if ((dynamicProperties = a.CastToType <attribute.DynamicProperties>()).IsNotNull())
                                            {
                                                if (property.ReletedEntity.IsNotNull() && property.ReletedEntity.Related == Releted.List)
                                                {
                                                    entityClass.DynamicProperties = new Internal.Descriptions.DynamicProperties()
                                                    {
                                                        CodeProperty = dynamicProperties.CodeProperty,
                                                        Property     = property,
                                                    };
                                                    dynamicList.Add(entityClass.DynamicProperties, dynamicProperties.ValueProperties);
                                                }
                                            }
                                            else if ((formatter = a.CastToType <Formatter>()).IsNotNull())
                                            {
                                                property.AddFormatter(formatter);
                                            }
                                            else if ((notIntercept = a.CastToType <NotIntercept>()).IsNotNull())
                                            {
                                                if (notIntercept.InterceptorId.IsNullOrEmpty())
                                                {
                                                    property.RemoveGetInterceptor(string.Empty);
                                                    property.RemoveSetInterceptor(string.Empty);
                                                }
                                                else
                                                {
                                                    if (notIntercept.Method == Method.Get)
                                                    {
                                                        property.RemoveGetInterceptor(notIntercept.InterceptorId);
                                                    }
                                                    else
                                                    {
                                                        property.RemoveSetInterceptor(notIntercept.InterceptorId);
                                                    }
                                                }
                                            }
                                            else if ((intercept = a.CastToType <Intercept>()).IsNotNull() && intercept.Method.IsNotNull())
                                            {
                                                if (intercept.Method.Contains(Method.Get))
                                                {
                                                    property.AddGetInterceptor(intercept.InterceptorId);
                                                }

                                                if (intercept.Method.Contains(Method.Set))
                                                {
                                                    property.AddSetInterceptor(intercept.InterceptorId);
                                                }
                                            }
                                        });
                                    });
                                    Attribute.GetCustomAttributes(entityType).ToList().ForEach((a) =>
                                    {
                                        EntityValidator validator = null;
                                        if ((validator = a.CastToType <EntityValidator>()).IsNotNull())
                                        {
                                            entityClass.Validators.Add(validator);
                                        }
                                    });
                                    ctx.Entites.Add(entityClass);
                                }
                                _entites.Value.Add(entityType.FullName, entityClass);
                            }
                            else
                            {
                                ctx.Entites.Add(_entites.Value[entityType.FullName]);
                            }
                        }
                    });
                    ctx.Relations.ForEach((r) =>
                    {
                        EntityClass entity = ctx.Entites.FirstOrDefault(e => e.Name == r.Parent.EntityName);
                        Debug.Assert(entity.IsNotNull(), "Relation[" + r.Name + "] parent entity not found");
                        r.Parent.Entity         = entity;
                        EntityProperty property = entity.Properties.FirstOrDefault(p => p.Name == r.Parent.Key);
                        Debug.Assert(property.IsNotNull(), "Entity[" + entity.Name + "] property[" + r.Parent.Key + "] not defined");
                        r.Parent.Type  = property.PropertyType;
                        r.Parent.Value = property.Getter;

                        EntityClass childEntity = ctx.Entites.FirstOrDefault(e => e.Name == r.Child.EntityName);
                        Debug.Assert(childEntity.IsNotNull(), "Relation[" + r.Name + "] child entity not found");
                        r.Child.Entity = childEntity;
                        EntityProperty childProperty = childEntity.Properties.FirstOrDefault(p => p.Name == r.Child.Key);
                        Debug.Assert(childProperty.IsNotNull(), "Entity[" + childEntity.Name + "] property[" + r.Child.Key + "] not defined");
                        r.Child.Type  = childProperty.PropertyType;
                        r.Child.Value = childProperty.Getter;
                    });

                    var reletedquery = ctx.Entites.Where(e => e.Properties.Count(p => p.ReletedEntity.IsNotNull()) > 0).
                                       SelectMany(e => e.Properties.Where(p => p.ReletedEntity.IsNotNull()), (e, p) => new { Entity = e, Property = p });

                    reletedquery.ToList().ForEach((ep) =>
                    {
                        EntityClass entityClass = ctx.Entites.FirstOrDefault(e => e.Name == ep.Property.ReletedEntity.RelatedEntityName);
                        Debug.Assert(entityClass.IsNotNull(), "Entity[" + ep.Property.ReletedEntity.RelatedEntityName + "] dosen't have collection");
                        ep.Property.ReletedEntity.RelatedEntity = entityClass;
                        if (ep.Property.ReletedEntity.Relation.IsNull())
                        {
                            if (!ep.Property.ReletedEntity.RelationName.IsNullOrEmpty())
                            {
                                EntitiesRelation relation = ctx.Relations.FirstOrDefault(r => r.Name == ep.Property.ReletedEntity.RelationName);
                                Debug.Assert(relation.IsNotNull(), "Relation[" + ep.Property.ReletedEntity.RelationName + "] not defined");
                                ep.Property.ReletedEntity.Relation = relation;
                            }
                            else
                            {
                                List <EntitiesRelation> relations = null;
                                if (ep.Property.ReletedEntity.Related == Releted.Entity)
                                {
                                    relations = ctx.Relations.Where(r => r.Parent.EntityName == ep.Property.ReletedEntity.RelatedEntityName && r.Child.EntityName == ep.Entity.Name).ToList();
                                }
                                else
                                {
                                    relations = ctx.Relations.Where(r => r.Parent.EntityName == ep.Entity.Name && r.Child.EntityName == ep.Property.ReletedEntity.RelatedEntityName).ToList();
                                }

                                Debug.Assert(relations.Count() < 2, "Relation[" + ep.Property.ReletedEntity.RelatedEntityName + "-" + ep.Entity.Name + "] more then one");
                                if (relations.Count() == 1)
                                {
                                    ep.Property.ReletedEntity.Relation = relations[0];
                                }
                            }
                        }
                        if (ep.Property.ReletedEntity.Synchronized)
                        {
                            ep.Property.ReletedEntity.RelatedEntity.Synchronized(ep.Entity.Name, ep.Property.Name);
                        }
                        if (ep.Property.ReletedEntity.Related == Releted.List)
                        {
                            ep.Property.AddGetInterceptor(CollectionInterceptorDispatcher.GetId(ep.Property.ReletedEntity.Relation.Child.Entity.EntityType));
                        }
                        else
                        {
                            ep.Property.AddGetInterceptor(EntityInterceptorDispatcher.GetId(ep.Property.ReletedEntity.RelatedEntityName));
                        }
                    });

                    foreach (MVCEngine.Model.Internal.Descriptions.DynamicProperties dynamicProperty in dynamicList.Keys)
                    {
                        foreach (string p in dynamicList[dynamicProperty])
                        {
                            EntityProperty property = dynamicProperty.Property.ReletedEntity.RelatedEntity.Properties.FirstOrDefault(pr => pr.Name == p);
                            if (property.IsNotNull())
                            {
                                dynamicProperty.ValuesProperties.Add(property.PropertyType, property.Name);
                            }
                        }
                    }
                });

                task.ContinueWith((antecedent) =>
                {
                    MVCEngine.Tools.Session.Session.ReleaseSession(sessionid);
                });

                task.ContinueWith((antecedent) =>
                {
                    if (_contexts.IsValueCreated)
                    {
                        _contexts.Value.Clear();
                    }
                    //ToDo log exception into log file
                }, TaskContinuationOptions.ExecuteSynchronously | TaskContinuationOptions.OnlyOnFaulted);

                MVCEngine.Tools.Session.Session.SetSessionData(sessionid, "InitializeTask", task);

                task.Start();
            }
        }
 /// <summary>
 /// Resets this indicator and all sub-indicators (Intercept, Slope)
 /// </summary>
 public override void Reset()
 {
     Intercept.Reset();
     Slope.Reset();
     base.Reset();
 }
Esempio n. 25
0
 /// <summary>
 /// 运行方法(非异步且有返回值)。
 /// </summary>
 /// <param name="context">上下文。</param>
 /// <param name="intercept">拦截器。</param>
 public abstract T Run <T>(InterceptContext context, Intercept <T> intercept);
Esempio n. 26
0
 /// <summary>
 /// 包装实例, 以便提供直接拦截实例中的虚方法
 /// </summary>
 /// <typeparam name="T">实例</typeparam>
 public static T 虚方法拦截 <T>(params object[] __构造参数) where T : class
 {
     return(Intercept.NewInstance <T>(new VirtualMethodInterceptor(), new[] { new LoggerBehavior() }, __构造参数));
 }
Esempio n. 27
0
 /// <inheritdoc />
 public override void Run(InterceptContext context, Intercept intercept)
 {
     intercept.Run(context);
 }
Esempio n. 28
0
 /// <summary>
 /// 包装实例, 以便提供直接拦截实例实现的接口方法
 /// </summary>
 /// <typeparam name="T">实例</typeparam>
 public static T 接口拦截 <T>(T __实现) where T : class
 {
     return(Intercept.ThroughProxy(__实现, new InterfaceInterceptor(), new[] { new LoggerBehavior() }));
 }
Esempio n. 29
0
 public override int GetHashCode()
 {
     return(Slope.GetHashCode() + Intercept.GetHashCode());
 }
Esempio n. 30
0
 /// <inheritdoc />
 public override T Run <T>(InterceptContext context, Intercept <T> intercept)
 {
     return(intercept.Run(context));
 }
 public AopProduct(IProduct product)
 {
     _product = Intercept.ThroughProxy(product, new InterfaceInterceptor(), new IInterceptionBehavior[] { new LoggingInterceptionBehavior() });
 }
Esempio n. 32
0
 public void Should_clear_intercepts_between_calls()
 {
     Intercept.Clear();
 }