/**************************************************************
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you 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.
 *
 *************************************************************/


#ifndef __com_sun_star_io_XStream_idl__
#define __com_sun_star_io_XStream_idl__

#ifndef __com_sun_star_uno_XInterface_idl__
#include <com/sun/star/uno/XInterface.idl>
#endif

#ifndef __com_sun_star_io_XInputStream_idl__
#include <com/sun/star/io/XInputStream.idl>
#endif
#ifndef __com_sun_star_io_XOutputStream_idl__
#include <com/sun/star/io/XOutputStream.idl>
#endif

//=============================================================================

module com {  module sun {  module star {  module io {


//=============================================================================

// DocMerge from xml: interface com::sun::star::io::XStream
/** offers read and write access to the same stream.
 */
published interface XStream: com::sun::star::uno::XInterface
{
	//-------------------------------------------------------------------------

	// DocMerge from xml: method com::sun::star::io::XStream::getInputStream
	/** @returns
			the <type>XInputStream</type> part of the stream.  Closing the returned
			<type>XInputStream</type> also closes any <type>XOutputStream</type> part.
	*/
	XInputStream getInputStream();


	//-------------------------------------------------------------------------

	// DocMerge from xml: method com::sun::star::io::XStream::getOutputStream
	/** @returns
			the <type>XInputStream</type> part of the stream. Closing the returned
			<type>XOutputStream</type> also closes the <type>XInputStream</type> part.
	*/
	XOutputStream getOutputStream();
};

//=============================================================================

}; }; }; };

/*=============================================================================

=============================================================================*/
#endif
