DuplicateDetector.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / System.Runtime.DurableInstancing / System / Runtime / DuplicateDetector.cs / 1305376 / DuplicateDetector.cs

                            //------------------------------------------------------------ 
// Copyright (c) Microsoft Corporation.  All rights reserved.
//-----------------------------------------------------------
namespace System.Runtime
{ 
    using System.Collections.Generic;
 
    class DuplicateDetector 
        where T : class
    { 
        LinkedList fifoList;
        Dictionary> items;
        int capacity;
        object thisLock; 

        public DuplicateDetector(int capacity) 
        { 
            Fx.Assert(capacity >= 0, "The capacity parameter must be a positive value.");
 
            this.capacity = capacity;
            this.items = new Dictionary>();
            this.fifoList = new LinkedList();
            this.thisLock = new object(); 
        }
 
        public bool AddIfNotDuplicate(T value) 
        {
            Fx.Assert(value != null, "The value must be non null."); 
            bool success = false;

            lock (this.thisLock)
            { 
                if (!this.items.ContainsKey(value))
                { 
                    Add(value); 
                    success = true;
                } 
            }

            return success;
        } 

        void Add(T value) 
        { 
            Fx.Assert(this.items.Count == this.fifoList.Count, "The items and fifoList must be synchronized.");
 
            if (this.items.Count == this.capacity)
            {
                LinkedListNode node = this.fifoList.Last;
                this.items.Remove(node.Value); 
                this.fifoList.Remove(node);
            } 
 
            this.items.Add(value, this.fifoList.AddFirst(value));
        } 

        public bool Remove(T value)
        {
            Fx.Assert(value != null, "The value must be non null."); 

            bool success = false; 
            LinkedListNode node; 
            lock (this.thisLock)
            { 
                if (this.items.TryGetValue(value, out node))
                {
                    this.items.Remove(value);
                    this.fifoList.Remove(node); 
                    success = true;
                } 
            } 

            return success; 
        }

        public void Clear()
        { 
            lock (this.thisLock)
            { 
                this.fifoList.Clear(); 
                this.items.Clear();
            } 
        }
    }
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK