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); }
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)); }
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); } }
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; }