public bool IsEqual(CSmartArray array)
        {
            Dictionary <ProductTag, int> map = array.GetMap();
            int count = m_TagMap.Count;

            if (count != map.Count)
            {
                return(false);
            }

            var en = m_TagMap.Keys.GetEnumerator();

            en.MoveNext();
            for (int i = 0; i < count; i++)
            {
                ProductTag pTag     = en.Current;
                int        TagCount = array.GetTagCount(pTag);
                if (TagCount == 0)
                {
                    return(false);
                }
                if (TagCount != GetTagCount(pTag))
                {
                    return(false);
                }
            }
            return(true);
        }
 public void UpdateResult(CSmartArray arr)
 {
     if (arr == null)
     {
         return;
     }
     arr.Merge(m_Result);
     m_Result.RemoveAll();
 }
        public void Merge(CSmartArray Arr)
        {
            var e = Arr.m_TagMap.Keys.GetEnumerator();

            e.MoveNext();
            for (int i = 0; i < Arr.m_TagMap.Keys.Count; i++)
            {
                ProductTag pTag = e.Current;
                Add(pTag, Arr.m_TagMap[pTag]);
                e.MoveNext();
            }
            e.Dispose();
        }
        public CSmartArray Copy()
        {
            CSmartArray array = new CSmartArray();
            var         e     = m_TagMap.Keys.GetEnumerator();

            for (int i = 0; i < m_TagMap.Keys.Count; i++)
            {
                e.MoveNext();
                ProductTag tag = e.Current;
                array.Add(tag, m_TagMap[tag]);
            }
            return(array);
        }
        virtual public void SetInput(CSmartArray Array)
        {
            int count = m_TagInputArray.Count;

            for (int i = 0; i < count; i++)
            {
                ProductTag tag          = m_TagInputArray[i];
                int        ProductCount = Array.GetTagCount(tag);
                m_InputCount[i] = ProductCount;
                m_SmartInput.Add(tag, ProductCount);
                Array.ClearTag(tag);
            }
        }
        public void Refresh()
        {
            m_InputCount = new List <int>();
            m_SmartInput = new CSmartArray();
            m_Result     = new CSmartArray();

            int count = m_TagInputArray.Count();

            for (int i = 0; i < count; i++)
            {
                m_InputCount.Add(0);
            }
        }
        public void ExcludeWhatHave(CSmartArray Arr)
        {
            var e = m_TagMap.Keys.GetEnumerator();
            List <ProductTag> sameTag = new List <ProductTag>();

            for (int i = 0; i < m_TagMap.Keys.Count; i++)
            {
                e.MoveNext();
                ProductTag tag   = e.Current;
                int        count = Arr.GetTagCount(tag);
                if (count != 0)
                {
                    sameTag.Add(tag);
                }
            }
            for (int i = 0; i < sameTag.Count; i++)
            {
                ProductTag tag   = sameTag[i];
                int        count = Arr.GetTagCount(tag);
                int        value = m_TagMap[tag];

                if (value > count)
                {
                    Add(tag, -count);
                    Arr.ClearTag(tag);
                }
                else if (value < count)
                {
                    ClearTag(tag);
                    Arr.Add(tag, -value);
                }
                else //одинаковое значение
                {
                    ClearTag(tag);
                    Arr.ClearTag(tag);
                }
            }
            //e.MoveNext();
        }