コード例 #1
0
        /// <summary>
        /// Removes several keys from this key-value map.
        /// </summary>
        /// <param name="keys">A sequence of keys to remove. Can be much faster if it's a set compatible with this map.</param>
        /// <returns></returns>
        public override ImmSortedMap <TKey, TValue> RemoveRange(IEnumerable <TKey> keys)
        {
            keys.CheckNotNull("keys");
            var set = keys as ImmSortedSet <TKey>;

            if (set != null && Comparer.Equals(set.Comparer))
            {
                return(Root.Except(set.Root, Lineage.Mutable()).WrapMap(Comparer));
            }
            return(base.RemoveRange(keys));
        }
コード例 #2
0
 public static ICommonSortedSet <T> GetSortedSetIfSameComparer(IEnumerable <T> other, IComparer <T> comparer)
 {
     if ((other is ICommonSortedSet <T> set) && comparer.Equals(set.Comparer))
     {
         return(set);
     }
     if ((other is SortedSet <T> set2) && comparer.Equals(set2.Comparer))
     {
         return(new SortedSetWrapper(set2));
     }
     return(null);
 }
コード例 #3
0
ファイル: GFSM.cs プロジェクト: kyungtai-nam/BrickBlast3D
    public void Update()
    {
        if (true == m_IsInit || !IComparer.Equals(m_tState, m_tNextState))
        {
            m_stateCurrent.onExit();
                        #if UNITY_EDITOR
            if (!m_hashState.ContainsKey(m_tState))
            {
                Debug.LogError("GFSM::state change error=" + m_tState.ToString());
                return;
            }
                        #endif
            m_tNextState   = m_tState;
            m_stateCurrent = m_hashState[m_tState];

            m_stateCurrent.onEnter();

            m_IsInit = false;
            m_nRenderedFrameCount = Time.renderedFrameCount;
        }
        else
        {
            if (m_nRenderedFrameCount < Time.renderedFrameCount)
            {
                m_stateCurrent.onUpdate();
            }
        }
    }
コード例 #4
0
        /// <summary>
        /// The terms array must be newly created <see cref="TermsEnum"/>, ie
        /// <see cref="TermsEnum.MoveNext()"/> has not yet been called.
        /// </summary>
        public TermsEnum Reset(TermsEnumIndex[] termsEnumsIndex)
        {
            if (Debugging.AssertsEnabled)
            {
                Debugging.Assert(termsEnumsIndex.Length <= top.Length);
            }
            numSubs  = 0;
            numTop   = 0;
            termComp = null;
            queue.Clear();
            for (int i = 0; i < termsEnumsIndex.Length; i++)
            {
                TermsEnumIndex termsEnumIndex = termsEnumsIndex[i];
                if (Debugging.AssertsEnabled)
                {
                    Debugging.Assert(termsEnumIndex != null);
                }

                // init our term comp
                if (termComp == null)
                {
                    queue.termComp = termComp = termsEnumIndex.TermsEnum.Comparer;
                }
                else
                {
                    // We cannot merge sub-readers that have
                    // different TermComps
                    IComparer <BytesRef> subTermComp = termsEnumIndex.TermsEnum.Comparer;
                    if (subTermComp != null && !subTermComp.Equals(termComp))
                    {
                        throw new InvalidOperationException("sub-readers have different BytesRef.Comparers: " + subTermComp + " vs " + termComp + "; cannot merge");
                    }
                }

                BytesRef term;
                if (termsEnumIndex.TermsEnum.MoveNext())
                {
                    term = termsEnumIndex.TermsEnum.Term;
                    TermsEnumWithSlice entry = subs[termsEnumIndex.SubIndex];
                    entry.Reset(termsEnumIndex.TermsEnum, term);
                    queue.Add(entry);
                    currentSubs[numSubs++] = entry;
                }
                else
                {
                    // field has no terms
                }
            }

            if (queue.Count == 0)
            {
                return(TermsEnum.EMPTY);
            }
            else
            {
                return(this);
            }
        }
コード例 #5
0
ファイル: Interval.cs プロジェクト: ikaragkiozoglou/brunet
        /**
         * Sort an interval based first on start, then on end, if they have
         * Equal underlying IComparer<T> objects
         * @throw ArgumentException if they do not have Equal IComparer<T>
         */
        public int CompareTo(Interval <T> other)
        {
            if (false == _comp.Equals(other._comp))
            {
                throw new ArgumentException("Intervals do not share a comparer");
            }
            int start_cmp = _comp.Compare(Start, other.Start);

            if (start_cmp != 0)
            {
                return(start_cmp);
            }
            else
            {
                if (StartIsOpen == other.StartIsOpen)
                {
                    int end_cmp = _comp.Compare(End, other.End);
                    if (end_cmp == 0)
                    {
                        if (EndIsOpen == other.EndIsOpen)
                        {
                            return(0);
                        }
                        else
                        {
                            //Put the open end interval first:
                            return(EndIsOpen ? -1 : 1);
                        }
                    }
                    else
                    {
                        return(end_cmp);
                    }
                }
                else
                {
                    /*
                     * these intervals start at the same point, but only one is open.
                     * put the closed interval first
                     */
                    return(StartIsOpen ? 1 : -1);
                }
            }
        }
コード例 #6
0
        public override IFilterNode <TFilter> Sort(IComparer <IFilterNode <TFilter> > comparer)
        {
            if (_comparer != null && _comparer.Equals(comparer))
            {
                return(this);
            }

            var sortedInnerNode = NodeToInvert.Sort();

            return(new InvertedFilterNode <TFilter>(sortedInnerNode, IsCollapsed, comparer));
        }
コード例 #7
0
        /// <summary>
        /// The terms array must be newly created TermsEnum, ie
        ///  <seealso cref="TermsEnum#next"/> has not yet been called.
        /// </summary>
        public TermsEnum Reset(TermsEnumIndex[] termsEnumsIndex)
        {
            Debug.Assert(termsEnumsIndex.Length <= Top.Length);
            NumSubs  = 0;
            NumTop   = 0;
            TermComp = null;
            Queue.Clear();
            for (int i = 0; i < termsEnumsIndex.Length; i++)
            {
                TermsEnumIndex termsEnumIndex = termsEnumsIndex[i];
                Debug.Assert(termsEnumIndex != null);

                // init our term comp
                if (TermComp == null)
                {
                    Queue.TermComp = TermComp = termsEnumIndex.TermsEnum.Comparator;
                }
                else
                {
                    // We cannot merge sub-readers that have
                    // different TermComps
                    IComparer <BytesRef> subTermComp = termsEnumIndex.TermsEnum.Comparator;
                    if (subTermComp != null && !subTermComp.Equals(TermComp))
                    {
                        throw new InvalidOperationException("sub-readers have different BytesRef.Comparators: " + subTermComp + " vs " + TermComp + "; cannot merge");
                    }
                }

                BytesRef term = termsEnumIndex.TermsEnum.Next();
                if (term != null)
                {
                    TermsEnumWithSlice entry = Subs[termsEnumIndex.SubIndex];
                    entry.Reset(termsEnumIndex.TermsEnum, term);
                    Queue.Add(entry);
                    CurrentSubs[NumSubs++] = entry;
                }
                else
                {
                    // field has no terms
                }
            }

            if (Queue.Size() == 0)
            {
                return(TermsEnum.EMPTY);
            }
            else
            {
                return(this);
            }
        }
コード例 #8
0
            public void AddRange(IEnumerable <T> items)
            {
                items.CheckNotNull("items");
                var set = items as ImmSortedSet <T>;

                if (set != null && _comparer.Equals(set.Comparer))
                {
                    _inner = _inner.Union(set.Root, null, _lineage);
                }
                else
                {
                    items.ForEach(x => Add(x));
                }
            }
コード例 #9
0
            public void AddRange(IEnumerable <KeyValuePair <TKey, TValue> > items)
            {
                items.CheckNotNull("items");
                var map = items as ImmSortedMap <TKey, TValue>;

                if (map != null && _comparer.Equals(map.Comparer))
                {
                    _inner = _inner.Union(map.Root, null, _lineage);
                }
                else
                {
                    items.ForEach(x => Add(x));
                }
            }
コード例 #10
0
        public override IFilterNode <TFilter> Sort(IComparer <IFilterNode <TFilter> > comparer)
        {
            // Only sort if absolutely necessary. We still need to sort inner nodes even if there is only 1.
            if (_comparer != null && _comparer.Equals(comparer) || Nodes.Length == 0)
            {
                return(this);
            }

            var sortedNodes = Nodes
                              .Select(n => n.Sort(comparer))
                              .OrderBy(n => n, comparer);

            return(new CombinationFilterNode <TFilter>(
                       sortedNodes,
                       Operator,
                       IsCollapsed,
                       comparer));
        }
コード例 #11
0
        /// <summary>
        /// Sole constructor.
        /// </summary>
        /// <param name="subs"> The <see cref="Terms"/> instances of all sub-readers. </param>
        /// <param name="subSlices"> A parallel array (matching
        ///        <paramref name="subs"/>) describing the sub-reader slices. </param>
        public MultiTerms(Terms[] subs, ReaderSlice[] subSlices)
        {
            this.subs      = subs;
            this.subSlices = subSlices;

            IComparer <BytesRef> _termComp = null;

            if (Debugging.AssertsEnabled)
            {
                Debugging.Assert(subs.Length > 0, "inefficient: don't use MultiTerms over one sub");
            }
            bool _hasFreqs     = true;
            bool _hasOffsets   = true;
            bool _hasPositions = true;
            bool _hasPayloads  = false;

            for (int i = 0; i < subs.Length; i++)
            {
                if (_termComp == null)
                {
                    _termComp = subs[i].Comparer;
                }
                else
                {
                    // We cannot merge sub-readers that have
                    // different TermComps
                    IComparer <BytesRef> subTermComp = subs[i].Comparer;
                    if (subTermComp != null && !subTermComp.Equals(_termComp))
                    {
                        throw IllegalStateException.Create("sub-readers have different BytesRef.Comparers; cannot merge");
                    }
                }
                _hasFreqs     &= subs[i].HasFreqs;
                _hasOffsets   &= subs[i].HasOffsets;
                _hasPositions &= subs[i].HasPositions;
                _hasPayloads  |= subs[i].HasPayloads;
            }

            termComp     = _termComp;
            hasFreqs     = _hasFreqs;
            hasOffsets   = _hasOffsets;
            hasPositions = _hasPositions;
            hasPayloads  = hasPositions && _hasPayloads; // if all subs have pos, and at least one has payloads.
        }
コード例 #12
0
ファイル: MultiTerms.cs プロジェクト: zfxsss/lucenenet
        /// <summary>
        /// Sole constructor.
        /// </summary>
        /// <param name="subs"> The <seealso cref="Terms"/> instances of all sub-readers. </param>
        /// <param name="subSlices"> A parallel array (matching {@code
        ///        subs}) describing the sub-reader slices. </param>
        public MultiTerms(Terms[] subs, ReaderSlice[] subSlices)
        {
            this.Subs      = subs;
            this.SubSlices = subSlices;

            IComparer <BytesRef> _termComp = null;

            Debug.Assert(subs.Length > 0, "inefficient: don't use MultiTerms over one sub");
            bool _hasFreqs     = true;
            bool _hasOffsets   = true;
            bool _hasPositions = true;
            bool _hasPayloads  = false;

            for (int i = 0; i < subs.Length; i++)
            {
                if (_termComp == null)
                {
                    _termComp = subs[i].Comparator;
                }
                else
                {
                    // We cannot merge sub-readers that have
                    // different TermComps
                    IComparer <BytesRef> subTermComp = subs[i].Comparator;
                    if (subTermComp != null && !subTermComp.Equals(_termComp))
                    {
                        throw new InvalidOperationException("sub-readers have different BytesRef.Comparators; cannot merge");
                    }
                }
                _hasFreqs     &= subs[i].HasFreqs();
                _hasOffsets   &= subs[i].HasOffsets();
                _hasPositions &= subs[i].HasPositions();
                _hasPayloads  |= subs[i].HasPayloads();
            }

            TermComp             = _termComp;
            HasFreqs_Renamed     = _hasFreqs;
            HasOffsets_Renamed   = _hasOffsets;
            HasPositions_Renamed = _hasPositions;
            HasPayloads_Renamed  = HasPositions_Renamed && _hasPayloads; // if all subs have pos, and at least one has payloads.
        }
コード例 #13
0
 /// <summary>
 /// Initialize a new instance of the <see cref="T:Academy.Collections.Generic.PriorityQueue`1"/> class that contains
 /// elements copied from the especified collection and uses the specified comparer.
 /// </summary>
 /// <param name="collection">The collection whose elements are copied to the new <see cref="T:Academy.Collections.Generic.PriorityQueue`1"/>.</param>
 /// <param name="comparer">The default comparer to use for compare objects.</param>
 public PriorityQueue(IEnumerable <T> collection, IComparer <T> comparer)
 {
     if (collection == null)
     {
         Thrower.ArgumentNullException(ArgumentType.collection);
     }
     if (comparer == null)
     {
         comparer = Comparer <T> .Default;
     }
     _comparer = comparer;
     if (collection is PriorityQueue <T> heap && _comparer.Equals(heap.Comparer))
     {
         _elements     = heap._elements.Clone() as T[];
         _currentIndex = heap._currentIndex;
     }
     else
     {
         if (!CollectionHelper.IsWellKnownCollection(collection, out int num))
         {
             num = DefaultCapacity;
         }
         _elements     = new T[num + 1];
         _comparer     = comparer;
         _currentIndex = 1;
         _elements[0]  = default(T);
         using (IEnumerator <T> enumerator = collection.GetEnumerator())
         {
             while (enumerator.MoveNext())
             {
                 Enqueue(enumerator.Current);
             }
         }
         TrimExcess();
     }
 }
コード例 #14
0
 public bool IsEqualState(T tState)
 {
     return(IComparer.Equals(m_tState, tState));
 }
コード例 #15
0
 private static bool AreEqualComparers(IComparer <T> comparer1, IComparer <T> comparer2)
 {
     return(comparer1.Equals(comparer2));
 }
コード例 #16
0
 public Equals(string x, string y)
 {
     return(_baseCmp.Equals(x ?? string.Empty, y ?? string.Empty));
 }
コード例 #17
0
 public override bool Equals(object o)
 {
     return((o == this) ||
            (o is ReverseComparer2 <T> &&
             cmp.Equals(((ReverseComparer2 <T>)o).cmp)));
 }
コード例 #18
0
ファイル: Utils.cs プロジェクト: xyuan/Dryad
        public override bool Equals(object obj)
        {
            ReverseComparer <T> objTyped = obj as ReverseComparer <T>;

            return(objTyped != null && _originalComparer.Equals(objTyped._originalComparer));
        }