void MakeCross() { TAlternativeParserGrpItemList m_Cur, m_Next; TAlternativeParserGrpItemList m_Max = null, m_Min = null; int m_res; while (true) { m_Cur = FindFirstListNoCross(); if (m_Cur == null) { return; } m_Next = FindNextListNoCross(m_Cur); while (m_Next != null) { m_res = CompareAlternate(m_Cur, m_Next, ref m_Max, ref m_Min); if (m_res == 1) { f_Cross.AddItem(m_Cur, m_Next); } m_Next = FindNextListNoCross(m_Cur); } m_Cur.CheckCross = true; } }
public void AddItem(TAlternativeParserGrpItemList AGList) { if (f_List.IndexOf(AGList) < 0) { f_List.Add(AGList); } }
void MakeAgregate() { TAlternativeParserGrpItemList m_Cur, m_Next; TAlternativeParserGrpItemList m_Max = null, m_Min = null; int m_res; while (true) { m_Cur = FindFirstList(); if (m_Cur == null) { return; } m_Next = FindNextList(m_Cur); while (m_Next != null) { m_res = CompareAlternate(m_Cur, m_Next, ref m_Max, ref m_Min); switch (m_res) { case 0: m_Min.Agregate = m_Max; break; } m_Next = FindNextList(m_Cur); } m_Cur.CheckAgregate = true; } }
public void FillBasisFromGrpItemList(TAlternativeParserGrpItemList AList) { for (int i = 0; i <= AList.Count - 1; i++) { BasisAdd(AList.GetItems(i).TFS); } }
public TAlternativeParserGrpItemList GetNewList(TAlternateTreeList Alternative) { TAlternativeParserGrpItemList Item = new TAlternativeParserGrpItemList(); Item.Alternative = Alternative; f_List.Add(Item); return(Item); }
int CompareAlternate(TAlternativeParserGrpItemList AL1, TAlternativeParserGrpItemList AL2, ref TAlternativeParserGrpItemList AMax, ref TAlternativeParserGrpItemList AMin) { int m_d1, m_d2, m_dMin; int m_find = 0; TTreeListTFS m_TFS; TAlternativeParserGrpItemList m_aMin, m_aMax; m_d1 = AL1.Count; m_d2 = AL2.Count; if (m_d1 > m_d2) { m_dMin = m_d2; m_aMax = AL1; m_aMin = AL2; } else { m_dMin = m_d1; m_aMax = AL2; m_aMin = AL1; } AMax = m_aMax; AMin = m_aMin; for (int i = 0; i <= m_dMin - 1; i++) { m_TFS = m_aMin.GetItems(i).TFS; if (m_aMax.FindItemTfs(m_TFS) != null) { m_find++; } } if (m_find <= 0) { return(-1); // не пересекаются } if (m_find < m_dMin) { return(1); // пересекаются } if (m_find == m_dMin) { return(0); // вложения } return(-2); }
TAlternativeParserGrpItemBase CheckOut(TAlternativeParserGrpItemList AItem) { { TAlternativeParserGrpItemBase Res; if (AItem.Agregate != null) { Res = f_Cross.FindToCross(AItem.Agregate); return(Res); } Res = f_Cross.FindToCross(AItem); if (Res != null) { return(Res); } return(AItem); } }
void DoCreateListItem(TAlternativeParserGrpItemList AItem, TAlternativeParserGrpCrossItemOut ANew) { int i; bool f_s = false; TAlternativeParserGrpItemBase Base; TAlternativeParserGrpItemTFS Tfs; TBaseWorkShape WS, WE; WS = AItem.Alternative.NodeStart.WorkShape; WE = AItem.Alternative.NodeEnd.WorkShape; for (i = 0; i <= CountBasis - 1; i++) { Base = GetItemsBasis(i); if (Base.Who() <= 0) { Tfs = (TAlternativeParserGrpItemTFS)(Base); if (Tfs.TFS.BaseWorkShape == WS) { f_s = true; break; } ANew.AddItem(Tfs); } } if (f_s) { ANew.AddItem(AItem); } for (; i <= CountBasis - 1; i++) { Base = GetItemsBasis(i); if (Base.Who() <= 0) { Tfs = (TAlternativeParserGrpItemTFS)(Base); if (Tfs.TFS.BaseWorkShape == WE) { break; } } } for (++i; i <= CountBasis - 1; i++) { ANew.AddItem(GetItemsBasis(i)); } }
bool IdentityAlternate(TAlternativeParserGrpItemList AL1, TAlternativeParserGrpItemList AL2) { TTreeListTFS Tfs1, Tfs2; int m_d1 = AL1.Count; int m_d2 = AL2.Count; if (m_d2 != m_d1) { return(false); } for (int i = 0; i <= m_d1 - 1; i++) { if (AL1.GetItems(i).TFS != AL2.GetItems(i).TFS) { return(false); } } return(true); }
/* public: * TAlternativeParserGrpCross(); * ~TAlternativeParserGrpCross();*/ public TAlternativeParserGrpCrossItem FindToCross(TAlternativeParserGrpItemList AItem) { { TAlternativeParserGrpItemList T; TAlternativeParserGrpCrossItem Item; for (int i = 0; i <= Count - 1; i++) { Item = GetItems(i); for (int j = 0; j <= Item.Count - 1; j++) { T = Item.GetItems(j); if (T == AItem) { return(Item); } } } return(null); } }
TAlternativeParserGrpItemList FindNextListNoCross(TAlternativeParserGrpItemList AByPass) { TAlternativeParserGrpItemBase Item; TAlternativeParserGrpItemList Res; ++f_FindListPosNoCross; for (int i = f_FindListPosNoCross; i <= f_List.Count - 1; i++) { Item = (TAlternativeParserGrpItemBase)(f_List.ElementAt(i)); if (Item.Who() == 1) { Res = (TAlternativeParserGrpItemList)(Item); if (Res != AByPass) { f_FindListPosNoCross = i; return(Res); } } } return(null); }
public void AddItem(TAlternativeParserGrpItemList A, TAlternativeParserGrpItemList B) { TAlternativeParserGrpItemList T; TAlternativeParserGrpCrossItem Item; for (int i = 0; i <= Count - 1; i++) { Item = GetItems(i); for (int j = 0; j <= Item.Count - 1; j++) { T = Item.GetItems(j); if ((A == T) || (B == T)) { Item.AddItem(A); Item.AddItem(B); return; } } } Item = new TAlternativeParserGrpCrossItem(); Item.AddItem(A); Item.AddItem(B); f_List.Add(Item); }