コード例 #1
0
        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;
            }
        }
コード例 #2
0
 public void AddItem(TAlternativeParserGrpItemList AGList)
 {
     if (f_List.IndexOf(AGList) < 0)
     {
         f_List.Add(AGList);
     }
 }
コード例 #3
0
        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;
            }
        }
コード例 #4
0
 public void FillBasisFromGrpItemList(TAlternativeParserGrpItemList AList)
 {
     for (int i = 0; i <= AList.Count - 1; i++)
     {
         BasisAdd(AList.GetItems(i).TFS);
     }
 }
コード例 #5
0
        public TAlternativeParserGrpItemList GetNewList(TAlternateTreeList Alternative)
        {
            TAlternativeParserGrpItemList Item = new TAlternativeParserGrpItemList();

            Item.Alternative = Alternative;
            f_List.Add(Item);
            return(Item);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
 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);
     }
 }
コード例 #8
0
        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));
            }
        }
コード例 #9
0
        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);
        }
コード例 #10
0
 /*  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);
     }
 }
コード例 #11
0
        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);
        }
コード例 #12
0
        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);
        }