Example #1
0
        public void When_ToString_is_called_Then_it_contains_a_number_of_counted_items()
        {
            var counter = new RefCounter <Item>();

            Assert.That(counter.ToString().Contains("0"), Is.True);
            counter.Retain(new Item());
            Assert.That(counter.ToString().Contains("1"), Is.True);
        }
Example #2
0
        public void When_few_items_are_retained_Then_count_is_incremented_appropriately()
        {
            var counter = new RefCounter <Item>();

            counter.Retain(new Item());
            counter.Retain(new Item());
            counter.Retain(new Item());
            Assert.That(counter.Count, Is.EqualTo(3));
        }
Example #3
0
 public void Dispose()
 {
     if (_machine != null)
     {
         _machine._refCount--;
         var count   = _machine._refCount;
         var machine = _machine;
         var evt     = _machine.CountChanged;
         _machine = null;
         evt?.Invoke(machine, count);
     }
 }
Example #4
0
        private SharedMemoryStream(object @lock, RefCounter refCounter, MemoryStream internalMemoryStream)
        {
            _lock = @lock;

            lock (_lock)
            {
                _refCounter           = refCounter;
                _internalMemoryStream = internalMemoryStream;

                _refCounter.Count++;
            }
        }
Example #5
0
        public static void ExplodeCommonPic(string commonPicArc, string outDir, SplitCommonPicArgs opFlags)
        {
            string     idxFileName     = Path.ChangeExtension(commonPicArc, ".idx");
            string     pictureDir      = null;
            RefCounter completionCount = new RefCounter();

            if ((opFlags & SplitCommonPicArgs.OutputPngPicture) != 0)
            {
                pictureDir = Path.Combine(outDir, "pictures");
                Directory.CreateDirectory(pictureDir);
            }
            int numIdxEntries;

            using (FileStream packFile = File.OpenRead(commonPicArc))
                using (FileStream idxFile = File.OpenRead(idxFileName))
                    using (BinaryReader idxFileRead = new BinaryReader(idxFile))
                    {
                        long packFileSize = packFile.Length;
                        numIdxEntries = idxFileRead.ReadInt32();
                        int           startPoint  = idxFileRead.ReadInt32();
                        StringBuilder outFileName = new StringBuilder(outDir);
                        outFileName.Append(Path.DirectorySeparatorChar);
                        int fileNameStart = outFileName.Length;
                        for (int i = 0; i < numIdxEntries; ++i)
                        {
                            int    endPoint = idxFileRead.ReadInt32();
                            int    len      = endPoint - startPoint;
                            byte[] buffer   = new byte[len];
                            packFile.Position = startPoint;
                            packFile.Read(buffer, 0, len);
                            outFileName.Length = fileNameStart;
                            outFileName.Append(i.ToString() + ".gtmp");
                            AsyncWriteState aws     = new AsyncWriteState();
                            FileStream      outFile = new FileStream(outFileName.ToString(), FileMode.Create, FileAccess.ReadWrite, FileShare.None, UInt16.MaxValue, true);
                            aws.file            = outFile;
                            aws.data            = buffer;
                            aws.ops             = opFlags;
                            aws.completionCount = completionCount;
                            if ((opFlags & SplitCommonPicArgs.OutputPngPicture) != 0)
                            {
                                aws.picFileName = Path.Combine(pictureDir, i.ToString() + ".gtmp.png");
                            }
                            outFile.BeginWrite(buffer, 0, len, new AsyncCallback(WriteComplete), aws);
                            startPoint = endPoint;
                        }
                    }
            while (!completionCount.HasReached(numIdxEntries))
            {
                System.Threading.Thread.Sleep(100);
            }
        }
 private void WithUnlock(T name, Func <RefCounter, int> unlockAction)
 {
     Monitor.Enter(_locks);
     {
         RefCounter refCounter = null;
         _locks.TryGetValue(name, out refCounter);
         if (refCounter != null)
         {
             if (0 == unlockAction(refCounter))
             {
                 _locks.Remove(name);
             }
         }
     }
     Monitor.Exit(_locks);
 }
Example #7
0
 private static bool InitializeFromTypeCastParameter(ExpressionSyntax variable, SemanticModel semanticModel, CancellationToken cancellationToken, out IParameterSymbol paramSymbol)
 {
     paramSymbol = null;
     if (variable is CastExpressionSyntax cast)
     {
         if (cast.Expression is IdentifierNameSyntax id)
         {
             var symbol = semanticModel.GetSymbolInfo(id, cancellationToken);
             if (symbol.Symbol is IParameterSymbol local)
             {
                 paramSymbol = local;
                 return(!RefCounter.IsAssignableTo(local.Type));
             }
         }
     }
     return(false);
 }
        private IDisposable WithLock(T name, Func <RefCounter, int> lockAction, Func <RefCounter, int> unlockAction)
        {
            Monitor.Enter(_locks);
            RefCounter refCounter = null;

            _locks.TryGetValue(name, out refCounter);
            if (refCounter == null)
            {
                refCounter = new RefCounter();
                lockAction(refCounter);
                _locks.Add(name, refCounter);
                Monitor.Exit(_locks);
            }
            else
            {
                Monitor.Exit(_locks);
                lockAction(refCounter);
            }
            return(new Token(() => WithUnlock(name, unlockAction)));
        }
Example #9
0
        private static RefCounter <Item> Create()
        {
            var counter = new RefCounter <Item>();

            counter.FirstTimeRetained += i => {
                i.FirstTimeRetained++;
            };

            counter.Incremented += i => {
                i.Incremented++;
            };

            counter.Decremented += i => {
                i.Decremented++;
            };

            counter.Released += i => {
                i.Released++;
            };

            return(counter);
        }
Example #10
0
 public Ref(T item, RefCounter counter)
 {
     _item    = item;
     _counter = counter;
 }
Example #11
0
        public void When_RefCounter_is_created_Then_it_is_empty()
        {
            var counter = new RefCounter <Item>();

            Assert.That(counter.Count, Is.Zero);
        }
Example #12
0
 protected EntityMap()
 {
     _entities   = new MyDictionary <EntityKey, IGameEntity>(1024, new EntityKeyComparer());
     _refCounter = new RefCounter(OnCleanUp, this);
 }
Example #13
0
 public Handle(RefCounter machine)
 {
     _machine = machine;
     _machine._refCount++;
     _machine.CountChanged?.Invoke(_machine, _machine._refCount);
 }
Example #14
0
 public Token(RefCounter <T> counter)
 {
     this.counter = counter;
     lock (counter)
         counter.count++;
 }