Beispiel #1
0
        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));
 }