Esempio n. 1
0
        static void Main(string[] args)
        {
            var expressionContainerA = new ExpressionContainer("a", (ConstExpression)3);
            var expressionContainerB = new ExpressionContainer("b", (ConstExpression)4);
            var expressionContainerC = new ExpressionContainer("c", (ParametarExpression)"x");

            var constExpression1     = new ConstExpression(3);
            var parametarExpressionX = new ParametarExpression("x");
            var binaryExpressionMul  = new BinaryExpression(constExpression1, parametarExpressionX, "*", false);

            var constExpression2     = new ConstExpression(15);
            var parametarExpressionY = new ParametarExpression("y");
            var binaryExpressionDiv  = new BinaryExpression(constExpression2, parametarExpressionY, "/", false);

            var constExpression3    = new ConstExpression(4);
            var binaryExpressionSub = new BinaryExpression(binaryExpressionDiv, constExpression3, "-", false);

            var binaryExpressionAdd = new BinaryExpression(binaryExpressionMul, binaryExpressionSub, "+", false);

            var expressionContainerIme = new ExpressionContainer("ime", binaryExpressionAdd);

            var binaryExpressionMul2    = new BinaryExpression(binaryExpressionMul, parametarExpressionY, "*", false);
            var expressionContainerIme2 = new ExpressionContainer("ime", binaryExpressionMul2);

            List <ExpressionContainer> lista = new List <ExpressionContainer>()
            {
                expressionContainerA, expressionContainerB, expressionContainerC
            };

            Thread t1 = new Thread(() => ExpressionSingleton.Instance.ListId(lista).ForEach(t => Console.WriteLine("t1 " + t.ToString())));

            Thread t2 = new Thread(() =>
            {
                ExpressionSingleton.Instance.ChangeName(expressionContainerA, "Novi");
                Console.WriteLine("t2 " + expressionContainerA.Name);
            });

            Thread t3 = new Thread(() =>
            {
                ExpressionSingleton.Instance.ChangeExpression(expressionContainerA, parametarExpressionY);
                expressionContainerA.Expression.Printf();
            });

            Thread t4 = new Thread(() => ExpressionSingleton.Instance.ListId(lista).ForEach(t => Console.WriteLine("t4 " + t.ToString())));

            t1.Start();
            t4.Start();
            t2.Start();
            t3.Start();


            Serialize(expressionContainerIme);
            Deserialize();

            //Console.ReadLine();
        }
        static void Main(string[] args)
        {
            var parametarExpressionX = new ParametarExpression("x");
            var parametarExpressionY = new ParametarExpression("y");
            var parametarExpressionZ = new ParametarExpression("z");

            List <Parametar> lista = new List <Parametar>()
            {
                new Parametar("x", 2),
                new Parametar("y", 4),
                new Parametar("z", 6)
            };

            List <IExpressionManipulator> list = new List <IExpressionManipulator>();

            Assembly assembly = Assembly.GetExecutingAssembly();

            List <Type> types = assembly.GetTypes().Where(t =>
                                                          t.GetInterfaces().Contains(typeof(IExpressionManipulator))).ToList();

            List <MyExpression> lst = new List <MyExpression>()
            {
                parametarExpressionX, parametarExpressionY, parametarExpressionZ
            };

            foreach (Type t in types)
            {
                if (t == typeof(AverageManipulator))
                {
                    ConstructorInfo ctop     = typeof(AverageManipulator).GetConstructor(new[] { typeof(List <MyExpression>) });
                    object          instance = ctop.Invoke(new object[] { lst });
                    list.Add((IExpressionManipulator)instance);
                }
                else
                {
                    IExpressionManipulator instance = (IExpressionManipulator)Activator.CreateInstance(t);
                    instance.Lst.AddRange(lst);
                    list.Add(instance);
                }
            }

            foreach (var obj in list)
            {
                Console.WriteLine(obj.Manipulate().Compile()(lista));
            }
        }