Example #1
0
        protected TempHashSet <K> CreateCopy()
        {
            // Copy existing data in FULLY NEW STRUCTURE
            SetEntry <K>[] table      = this.table;
            TempHashSet <K> backupSet = new TempHashSet <K>(table.Length, this.loadFactor, delegate(K key, SetEntry <K> entry)
            {
                return(EqualKeys(key, entry));
            }, delegate(K key)
            {
                return(ExtractHash(key));
            });

            for (int a = table.Length; a-- > 0;)
            {
                SetEntry <K> entry = table[a];
                while (entry != null)
                {
                    K key = GetKeyOfEntry(entry);
                    if (key != null)
                    {
                        backupSet.Add(CloneKey(key));
                    }
                    entry = GetNextEntry(entry);
                }
            }
            return(backupSet);
        }
Example #2
0
        public override bool Add(K key)
        {
            Object writeLock = GetWriteLock();

            lock (writeLock)
            {
                TempHashSet <K> backupMap = CreateCopy();
                // Write new data in the copied structure
                if (!backupMap.Add(key))
                {
                    return(false);
                }
                SaveCopy(backupMap);
                return(true);
            }
        }