/**************************************************************
 * 
 * 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_XDataOutputStream_idl__ 
#define __com_sun_star_io_XDataOutputStream_idl__ 
 
#ifndef __com_sun_star_io_XOutputStream_idl__ 
#include <com/sun/star/io/XOutputStream.idl> 
#endif 
 
#ifndef __com_sun_star_io_IOException_idl__ 
#include <com/sun/star/io/IOException.idl> 
#endif 
 
 
//============================================================================= 
 
module com {  module sun {  module star {  module io {  
 
//============================================================================= 
 
// DocMerge from xml: interface com::sun::star::io::XDataOutputStream
/** makes it possible to write machine-independent simple data types to a
	stream.
    @see com::sun::star::io::XDataInputStream
 */
published interface XDataOutputStream: com::sun::star::io::XOutputStream
{ 
	//------------------------------------------------------------------------- 
	 
	// DocMerge from xml: method com::sun::star::io::XDataOutputStream::writeBoolean
	/** writes a boolean. It is an 8-bit value. 0 means FALSE; all other
		values mean TRUE.
	 */
	void writeBoolean( [in] boolean Value ) 
			raises( com::sun::star::io::IOException ); 
 
	//------------------------------------------------------------------------- 
	 
	// DocMerge from xml: method com::sun::star::io::XDataOutputStream::writeByte
	/** writes an 8-bit byte.
	 */
	void writeByte( [in] byte Value ) 
			raises( com::sun::star::io::IOException ); 
 
	//------------------------------------------------------------------------- 
	 
	// DocMerge from xml: method com::sun::star::io::XDataOutputStream::writeChar
	/** writes a 16-bit character.
	 */
	void writeChar( [in] char Value ) 
			raises( com::sun::star::io::IOException ); 
 
	//------------------------------------------------------------------------- 
	 
	// DocMerge from xml: method com::sun::star::io::XDataOutputStream::writeShort
	/** writes a 16-bit big endian integer.
	 */
	void writeShort( [in] short Value ) 
			raises( com::sun::star::io::IOException ); 
 
	//------------------------------------------------------------------------- 
	 
	// DocMerge from xml: method com::sun::star::io::XDataOutputStream::writeLong
	/** writes a 32-bit big endian integer.
	 */
	void writeLong( [in] long Value ) 
			raises( com::sun::star::io::IOException ); 
 
	//------------------------------------------------------------------------- 
	 
	// DocMerge from xml: method com::sun::star::io::XDataOutputStream::writeHyper
	/** writes a 64-bit big endian integer.
	 */
	void writeHyper( [in] hyper Value ) 
			raises( com::sun::star::io::IOException ); 
 
	//------------------------------------------------------------------------- 
	 
	// DocMerge from xml: method com::sun::star::io::XDataOutputStream::writeFloat
	/** writes a 32-bit IEEE float.
	 */
	void writeFloat( [in] float Value ) 
			raises( com::sun::star::io::IOException ); 
 
	//------------------------------------------------------------------------- 
	 
	// DocMerge from xml: method com::sun::star::io::XDataOutputStream::writeDouble
	/** writes a 64-bit IEEE double.
	 */
	void writeDouble( [in] double Value ) 
			raises( com::sun::star::io::IOException ); 
 
	//------------------------------------------------------------------------- 
	 
	// DocMerge from xml: method com::sun::star::io::XDataOutputStream::writeUTF
	/** writes a string in UTF format.
	 */
	void writeUTF( [in] string Value ) 
			raises( com::sun::star::io::IOException ); 
 
}; 
 
//============================================================================= 
 
}; }; }; };  
 
/*============================================================================= 
 
=============================================================================*/ 
#endif 
