示例#1
0
        public void Add(Term addition)
        {
            if (topLayer is AddSubtractLayer) ((AddSubtractLayer)topLayer).Additions.Add(addition.TopLayer);
            else
            {
                AddSubtractLayer newTopLayer = new AddSubtractLayer();
                newTopLayer.Additions.Add(topLayer);
                newTopLayer.Additions.Add(addition.TopLayer);

                topLayer = Layer.GetBetterChild(newTopLayer);
            }
        }
        private void AddFirstToLayerAndDeleteFromList(AddSubtractLayer layer, List<IElement> els)
        {
            bool isAddition = true;
            if (els[0] is MinusElement) isAddition = false;
            if (els[0] is PlusElement || els[0] is MinusElement) els.RemoveAt(0);

            int length = GetFirstIndexOrCount(els, typeof(PlusElement), typeof(MinusElement));

            ElementsToLayersParser parser = new ElementsToLayersParser(els.GetRange(0, length));
            parser.Parse();
            if (isAddition) layer.Additions.Add(parser.TopLayer);
            if (!isAddition) layer.Subtractions.Add(parser.TopLayer);

            els.RemoveRange(0, length);
        }
        private AddSubtractLayer ParseAddSubtractLayerFromElements()
        {
            AddSubtractLayer layer = new AddSubtractLayer();
            List<IElement> els = new List<IElement>(elements);

            while (els.Count > 0)
                AddFirstToLayerAndDeleteFromList(layer, els);

            return layer;
        }
        private AddSubtractLayer CreateNonCombinedLayerPart(ILayer[] pair, MultiplyDivideLayer[] parents)
        {
            AddSubtractLayer layerPart = new AddSubtractLayer();

            MultiplyDivideLayer layer0 = Layer.GetMultiplyDivideLayerWithoutOne(parents[0], pair[0]);
            if (additions.Contains(parents[0])) layerPart.Additions.Add(layer0);
            else layerPart.Subtractions.Add(layer0);

            MultiplyDivideLayer layer1 = Layer.GetMultiplyDivideLayerWithoutOne(parents[1], pair[1]);
            if (additions.Contains(parents[1])) layerPart.Additions.Add(layer1);
            else layerPart.Subtractions.Add(layer1);

            return layerPart;
        }