Main Page   Namespace List   Class Hierarchy   Compound List   File List   Compound Members  

FileOutputStream.cpp

00001 /*
00002  * NOTE: "zlib/libpng" style License
00003  *
00004  *                 ----=== s t d n e t ===----
00005  *
00006  * Copyright (c) 2002 Warwick Molloy   w-molloy@users.sf.net
00007  *
00008  * Copyright (c) 2002 Stdnet Community
00009  * HTTP://Sourceforge.net/projects/stdnet
00010  *
00011  * All references to "software" refer to the stdnet.
00012  *
00013  * This software is provided 'as-is', without any express or
00014  * implied warranty. In no event will the authors be held liable
00015  * for any damages arising from the use of this software.
00016  *
00017  * Permission is granted to anyone to use this software for any
00018  * purpose, including commercial applications, and to alter it
00019  * and redistribute it freely, subject to the following
00020  * restrictions:
00021  *
00022  * 1.  The origin of this software must not be misrepresented;
00023  *     you must not claim that you wrote the original software.
00024  *     If you use this software in a product, an acknowledgment
00025  *     in the product documentation would be appreciated but
00026  *     is not required.
00027  *
00028  * 2.  Altered source versions must be plainly marked as such,
00029  *     and must not be misrepresented as being the original
00030  *     software.
00031  *
00032  * 3.  This notice may not be removed or altered from any source
00033  *     distribution.
00034  */
00035 
00036 #include <stdnet/config.h>
00037 #include <stdnet/io/FileOutputStream>
00038 
00039 namespace stdbase {
00040     namespace io {
00041 
00042 using ::stdbase::system::reference;
00043 using ::stdbase::system::StringRef;
00044 
00045 typedef ::stdbase::system::platform::FileDescriptor
00046     FileDescriptor;
00047 
00048 typedef FileDescriptor::Flags               Flags;
00049 
00050 void FileOutputStream::
00051     write( int b)
00052     throw (IOException)
00053 {
00054     char aByte = static_cast<char>( b );
00055     
00056     if ( file == 0 || ! file->isOpen() )
00057         throw IOException();
00058     
00059     if ( ! file->write( &aByte, 1 ) )
00060         throw IOException();
00061 }
00062 
00063 void FileOutputStream::
00064     write( byte b[], int len)
00065     throw (IOException)
00066 {
00067     if ( file == 0 || ! file->isOpen() )
00068         throw IOException();
00069 
00070     if ( len <= 0 )
00071         throw IOException();
00072     
00073     char * aBuffer = (char*)( b );
00074     
00075     if ( ! file->write( aBuffer, len ) )
00076         throw IOException();
00077 }
00078 
00079 
00080 void FileOutputStream::
00081     flush()
00082     throw (IOException)
00083 {
00084     if ( file == 0 || ! file->isOpen() )
00085         throw IOException();
00086 }
00087 
00088 void FileOutputStream::
00089     close()
00090     throw (IOException)
00091 {
00092     if ( file == 0 || ! file->isOpen() )
00093         throw IOException();
00094     if ( ! file->close() )
00095         throw IOException();
00096 }
00097 
00098 //  --  Static factory functions --
00099 //  
00100 reference< FileOutputStream >  FileOutputStream::
00101     create( system::StringRef name )
00102 {
00103     return FileOutputStreamRef( new FileOutputStream( name ) );
00104 }
00105 
00106 reference< FileOutputStream >  FileOutputStream::
00107     create( const FileDescriptor & _fd)
00108 {
00109     return FileOutputStreamRef( new FileOutputStream( _fd ) );
00110 }
00111 
00112 // -- Constructors/Destructor --
00113 
00114 FileOutputStream::
00115     FileOutputStream( StringRef name )
00116 {
00117     int len = name->length();
00118     char *  MyName = new char[ len + 2];
00119     name->getChars( 0, len, MyName, 0);
00120     MyName[ len ] = 0;
00121     file = new system::platform::FileDescriptor();
00122     
00123     file-> open( MyName, FileDescriptor::CREATE_WRITE_BIN);
00124 }
00125 
00126 FileOutputStream::
00127     FileOutputStream( const system::platform::FileDescriptor & fd)
00128     :   file( const_cast< system::platform::FileDescriptor *>(& fd ) )
00129 {
00130 }
00131 
00132 FileOutputStream::
00133     ~FileOutputStream()
00134 {
00135     try {   close(); }
00136     catch( IOException e )
00137     {   e = e; }
00138     if ( file != 0 )
00139     {
00140         delete file;
00141         file = 0;
00142     }
00143 }
00144 
00145     } // -- end io --
00146 } // ------ end stdbase --
00147 

Generated at Tue Aug 13 14:19:39 2002 for stdnet2 by doxygen1.2.9.1 written by Dimitri van Heesch, © 1997-2001