#region Copyright 2011-2014 by Roger Knapp, Licensed under the Apache License, Version 2.0
/* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#endregion
using System;
using System.IO;
using CSharpTest.Net.Interfaces;
namespace CSharpTest.Net.IO
{
///
/// A memory stream that can be cloned to create an instance for another thread to access
/// the same memory pool.
///
public class SharedMemoryStream : SegmentedMemoryStream, ICloneable, IFactory
{
///
/// Creates a memory stream that uses 32k segments for storage
///
public SharedMemoryStream()
: base(short.MaxValue)
{ }
///
/// Create a memory stream that uses the specified size of segments
///
public SharedMemoryStream(int segmentSize)
: base(segmentSize)
{ }
/// Creates a 'clone' of the stream sharing the same contents
public SharedMemoryStream(SharedMemoryStream from)
: base(Check.NotNull(from))
{ }
///
/// Returns a 'clone' of this stream so that the two instances act independantly upon a single set of data
///
public SharedMemoryStream Clone() { return new SharedMemoryStream(this); }
object ICloneable.Clone() { return Clone(); }
Stream IFactory.Create() { return Clone(); }
}
}