Пример #1
0
        private ArrayList getListValue(object obj, CellExt leftHead, CellExt topHead, bool dispValue)
        {
            ArrayList o = null;

            if (obj is ArrayList)
            {
                o = (ArrayList)obj;
            }
            else if (obj is CSVar)
            {
                CSVar   var    = (CSVar)obj;
                CellExt source = var.Source;
                CellExt ext2   = var.LeftHead;
                CellExt ext3   = var.TopHead;
                CellExt ext4   = ext2.Source;
                CellExt ext5   = ext3.Source;
                if (((leftHead == null) || !ext4.isLeftHeadOf(leftHead.Source)) || !leftHead.Source.isLeftHeadOf(source))
                {
                    leftHead = ext2;
                }
                if (((topHead == null) || !ext5.isTopHeadOf(topHead.Source)) || !topHead.Source.isTopHeadOf(source))
                {
                    topHead = ext3;
                }
                o = var.getCells(leftHead, topHead, null);
            }
            else
            {
                o = new ArrayList(1);
                o.Add(obj);
            }
            return((ArrayList)ConvertTool.getValue(o, dispValue));
        }
Пример #2
0
        public override object calculate()
        {
            if (base.unit_0 == null)
            {
                throw new ReportError("位移函数[]左操作数为空");
            }
            object obj3 = base.unit_0.calculate();

            if (!(obj3 is CSVar))
            {
                throw new ReportError("位移函数[]左操作数应为单元格");
            }
            CSVar   var    = (CSVar)obj3;
            CellExt source = var.Source;

            if (!this.bool_0)
            {
                int     num6     = this.arrayList_0.Count;
                int     num2     = this.arrayList_1.Count;
                CellExt current  = base.cs.Current;
                CellExt leftHead = current.getLeftHead();
                CellExt topHead  = current.getTopHead();
                for (int i = 0; i < num6; i++)
                {
                    GClass1 class3 = (GClass1)this.arrayList_0[i];
                    int     index  = 0;
                    if (class3.source == null)
                    {
                        if (source.ExtCells != null)
                        {
                            class3.source = source;
                        }
                        else
                        {
                            class3.source = source.getLeftHead();
                        }
                    }
                    CellExt ext6 = current.getLeftHead(class3.source);
                    switch (class3.type)
                    {
                    case 0:
                        index = class3.position;
                        break;

                    case 1:
                        if (ext6 == null)
                        {
                            throw new ReportError("位移对象超出范围");
                        }
                        index = ext6.Position + class3.position;
                        break;

                    case 2:
                        if (ext6 == null)
                        {
                            throw new ReportError("位移对象超出范围");
                        }
                        index = ext6.Position;
                        break;
                    }
                    if (class3.source.isLeftHeadOf(leftHead.Source))
                    {
                        leftHead = leftHead.getLeftHead(class3.source);
                    }
                    else
                    {
                        leftHead = leftHead.getSubCell(class3.source);
                    }
                    if (leftHead == null)
                    {
                        return(null);
                    }
                    leftHead.testValue();
                    leftHead = leftHead.getExtCell(index);
                    if (leftHead == null)
                    {
                        return(null);
                    }
                }
                for (int j = 0; j < num2; j++)
                {
                    GClass1 class2   = (GClass1)this.arrayList_1[j];
                    int     position = 0;
                    if (class2.source == null)
                    {
                        if (source.ExtCells == null)
                        {
                            class2.source = source.getTopHead();
                        }
                        else
                        {
                            class2.source = source;
                        }
                    }
                    CellExt ext4 = current.getTopHead(class2.source);
                    switch (class2.type)
                    {
                    case 0:
                        position = class2.position;
                        break;

                    case 1:
                        if (ext4 == null)
                        {
                            throw new ReportError("位移对象超出范围");
                        }
                        position = ext4.Position + class2.position;
                        break;

                    case 2:
                        if (ext4 == null)
                        {
                            throw new ReportError("位移对象超出范围");
                        }
                        position = ext4.Position;
                        break;
                    }
                    if (class2.source.isTopHeadOf(topHead.Source))
                    {
                        topHead = topHead.getTopHead(class2.source);
                    }
                    else
                    {
                        topHead = topHead.getSubCell(class2.source);
                    }
                    if (topHead == null)
                    {
                        return(null);
                    }
                    topHead.testValue();
                    topHead = topHead.getExtCell(position);
                    if (topHead == null)
                    {
                        return(null);
                    }
                }
                return(new CSVar(source, leftHead, topHead));
            }
            return(this.method_0(source, this.int_1, this.int_2));
        }