void CrossToBigs(TAlternativeParserGrpCrossItem ACrossItem, TAlternativeParserItemBig ABig) { TAlternativeParserGrpItemBase Base; TAlternativeParserGrpCrossItemOut Cross; TAlternativeParserItemBig mHeadBig = new TAlternativeParserItemBig(); mHeadBig.OwnerBig = ABig; ABig.MainList.Append(mHeadBig); TAlternativeParserItemBig mBig = new TAlternativeParserItemBig(); for (int i = 0; i <= ACrossItem.CountBasis - 1; i++) { FillItemGrp(ACrossItem.GetItemsBasis(i), ref mBig); } mBig.Check = true; mBig.OwnerBig = mHeadBig; mBig.NumAlt = 0; mBig.Cross = true; mHeadBig.AddBig(mBig); for (int i = 0; i <= ACrossItem.CountOut - 1; i++) { mBig = new TAlternativeParserItemBig(); Cross = ACrossItem.GetItemsOut(i); mBig.Check = true; mBig.Cross = true; for (int j = 0; j <= Cross.Count - 1; j++) { FillItemGrp(Cross.GetItems(j), ref mBig); } mBig.NumAlt = i + 1; mBig.OwnerBig = mHeadBig; mHeadBig.AddBig(mBig); } }
void MakeBig(ref TAlternativeParserItemBig ABig, bool AByPass) { int m_n = 0; bool b_basis, b_main, b_tail, b_go, b_parent, b_cbm, b_valid = false; TTreeListTFS TFS; TAlternateTreeList AItem; TAlternativeParserItemBig NewBig; TMainTreeList m_Tree = ABig.MainTreeList; TDynamicArray D = new TDynamicArray(); TDynamicArray Mass = new TDynamicArray(); bool m_whl = true; bool m_hook = false; while (m_whl) { m_whl = false; f_Grp.Clear(); for (int i = 0; i <= ABig.BasisCount - 1; i++) { TFS = ABig.GetBasisItems(i); m_Tree.FindAlternate(TFS.BaseWorkShape, D); b_go = false; if (D.Count > 0) { for (int j = 0; j <= D.Count - 1; j++) { AItem = (TAlternateTreeList)(D.GetItems(j)); b_basis = ABig.CompareBasisAndAlternateTreeList(AItem); b_main = AItem.MainAlternative; b_tail = ABig.IsTailAlternateTreeList(AItem); b_parent = ABig.ParentTFE != null; if (!b_basis && !b_main) { Mass.Clear(); ABig.GetTreeListTFSFromBasis(AItem, Mass, ref b_valid); if (!b_valid) { continue; } b_cbm = ABig.CompareBasisAndMassiv(Mass); b_go = (AByPass || !b_cbm || b_parent); if (b_go) { CreateParserGrpItemList(Mass, AItem); } } if (b_tail && !b_main && !b_go) { m_n++; NewBig = new TAlternativeParserItemBig(); NewBig.NumAlt = m_n; NewBig.FillBasisAlternateTreeList(AItem); NewBig.OwnerBig = ABig; ABig.AddBig(NewBig); } } } f_Grp.AddTfs(TFS); } if (ABig.BadBasis && !m_hook) { ABig.HookBasisBig(); m_hook = true; m_whl = true; } } f_Grp.Make(); FillBigFromGrp(ref ABig); D = null; Mass = null; }