Пример #1
0
        public AnonymousUnion CollectUnion(int membersIndex, int resetterIndex, Offset offset)
        {
            AnonymousUnion result    = new AnonymousUnion();
            Column         curColumn = this;

            for (; ;)
            {
                // determine have we encountered the last parallel column
                if (resetterIndex == -1)
                {
                    break;
                }

                Column nextColumn = curColumn._resetters[resetterIndex];
                if (!nextColumn.TopOffset.IsEqualTo(offset))
                {
                    break;
                }

                result.Add(curColumn.CollectStruct(membersIndex, resetterIndex - 1));

                curColumn     = nextColumn;
                membersIndex  = nextColumn._beginIndex;
                resetterIndex = nextColumn._resetters.Count - 1;
            }
            result.Add(curColumn.CollectStruct(membersIndex, resetterIndex));
            return(result);
        }
Пример #2
0
        public CUnion CollectUnion(IDiaEnumSymbols symbols)
        {
            LeafMembers allMembers = new LeafMembers(symbols);
            Columns     columns    = allMembers.CalculateColumns();

            columns.CalculateResetters();
            AnonymousUnion union = columns.CollectUnion();

            union.PostProcess();
            union.SinglizeStructs();
            return((CUnion)union.ToCType(_translator));
        }
Пример #3
0
        private Offset PostProcess1()
        {
            Member lastMember = _members.Last();

            if (lastMember is AnonymousUnion)
            {
                AnonymousUnion  union = (AnonymousUnion)lastMember;
                AnonymousStruct lastStruct;
                int             beginIndex;
                Offset          maxBotOffset = union.PostProcessWithCut(out lastStruct, out beginIndex);
                lastStruct.TransferMembers(beginIndex, this);

                return(maxBotOffset);
            }
            else
            {
                return(((LeafMember)lastMember).BotOffset);
            }
        }
Пример #4
0
        public AnonymousUnion CollectUnion(int membersIndex, int resetterIndex, Offset offset)
        {
            AnonymousUnion result = new AnonymousUnion();
            Column curColumn = this;

            for (; ; )
            {
                // determine have we encountered the last parallel column
                if (resetterIndex == -1) { break; }

                Column nextColumn = curColumn._resetters[resetterIndex];
                if (!nextColumn.TopOffset.IsEqualTo(offset)) { break; }

                result.Add(curColumn.CollectStruct(membersIndex, resetterIndex - 1));

                curColumn = nextColumn;
                membersIndex = nextColumn._beginIndex;
                resetterIndex = nextColumn._resetters.Count - 1;
            }
            result.Add(curColumn.CollectStruct(membersIndex, resetterIndex));
            return result;
        }