コード例 #1
0
        public bool evict(object key, bool includeLive = true)
        {
            if (includeLive)
            {
                _LiveImage liveImage = _liveImages.getOrDefault(key);
                _liveImages.Remove(key);
                liveImage?.removeListener();
            }

            D.assert(key != null);

            if (_pendingImages.TryGetValue(key, out var pendingImage))
            {
                pendingImage.removeListener();
                _pendingImages.Remove(key);
                return(true);
            }

            if (_cache.TryGetValue(key, out var image))
            {
                _currentSizeBytes -= image.sizeBytes ?? 0;
                _cache.Remove(key);
                _lruKeys.Remove(image.node);
                return(true);
            }

            return(false);
        }
コード例 #2
0
        void _trackLiveImage(Object key, _LiveImage image, bool debugPutOk = true)
        {
            var imageOut = _liveImages.putIfAbsent(key, () => {
                D.assert(debugPutOk);
                image.completer.addOnLastListenerRemovedCallback(image.handleRemove);
                return(image);
            });

            imageOut.sizeBytes = image.sizeBytes ?? image.sizeBytes;
        }