public StreamID Reference(StreamID streamID) { LocalStreamHeader targetHeader; if (_headers.TryGetValue(streamID, out targetHeader) && (targetHeader.Stream != null) && targetHeader.Stream.Modified) { StreamID localStreamID = Allocate(); Stream stream = Open(localStreamID, LockMode.Exclusive); try { Stream targetStream = new CoverStream(targetHeader.Stream); try { StreamUtility.CopyStream(targetStream, stream); return(localStreamID); } finally { targetStream.Close(); } } finally { stream.Close(); Close(localStreamID); } } else { StreamID localStreamID = _sourceStreamManager.Reference(streamID); LocalStreamHeader header = new LocalStreamHeader(localStreamID); _headers.Add(header); return(localStreamID); } }
StreamID IStreamManager.Reference(StreamID streamID) { return(StreamManager.Reference(streamID)); }