private ChecksumObject SaveAndReturn(object key, ChecksumObject checksumObject, ChecksumObjectCache entry = null) { // create new entry if it is not already given ChecksumObjectCache self; if (_cache.TryGetValue(key, out self)) { // we already have entry return(self.Add(checksumObject)); } // either create new entry or re-use given one. this will let us share // whole sub checksum tree that is associated with given green node (key) entry = _cache.GetOrAdd(key, _ => entry ?? new ChecksumObjectCache()); return(entry.Add(checksumObject)); }
private ChecksumObject SaveAndReturn(object key, ChecksumObject checksumObject, ChecksumObjectCache entry = null) { // create new entry if it is not already given entry = _cache.GetOrAdd(key, _ => entry ?? new ChecksumObjectCache(checksumObject)); return(entry.Add(checksumObject)); }