TuttleOFX  1
OutStream.cpp
Go to the documentation of this file.
00001 // -*- mode: C++; tab-width: 4 -*-
00002 // vi: ts=4
00003 
00004 /*
00005  * Copyright (c) 2009, Patrick A. Palmer.
00006  * All rights reserved.
00007  *
00008  * Redistribution and use in source and binary forms, with or without 
00009  * modification, are permitted provided that the following conditions are met:
00010  *
00011  *   - Redistributions of source code must retain the above copyright notice,
00012  *     this list of conditions and the following disclaimer.
00013  *
00014  *   - Redistributions in binary form must reproduce the above copyright
00015  *     notice, this list of conditions and the following disclaimer in the
00016  *     documentation and/or other materials provided with the distribution.
00017  *
00018  *   - Neither the name of Patrick A. Palmer nor the names of its
00019  *     contributors may be used to endorse or promote products derived from
00020  *     this software without specific prior written permission.
00021  *
00022  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
00023  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
00024  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
00025  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
00026  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
00027  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
00028  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
00029  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
00030  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
00031  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
00032  * POSSIBILITY OF SUCH DAMAGE.
00033  */ 
00034 
00035 #include <cstdio>
00036 
00037 
00038 #include "DPXStream.h"
00039 
00040 
00041 OutStream::OutStream() : fp(0)
00042 {
00043 }
00044 
00045 
00046 OutStream::~OutStream()
00047 {
00048 }
00049 
00050 
00051 bool OutStream::Open(const char *f)
00052 {
00053         if (this->fp)
00054                 this->Close();
00055         if ((this->fp = ::fopen(f, "wb")) == 0)
00056                 return false;
00057                 
00058         return true;
00059 }
00060 
00061 
00062 void OutStream::Close()
00063 {
00064         if (this->fp)
00065         {
00066                 ::fclose(this->fp);
00067                 this->fp = 0;
00068         }
00069 }
00070 
00071 
00072 size_t OutStream::Write(void *buf, const size_t size)
00073 {
00074         if (this->fp == 0)
00075                 return false;
00076         return ::fwrite(buf, 1, size, this->fp);
00077 }
00078 
00079 
00080 bool OutStream::Seek(long offset, Origin origin)
00081 {
00082         int o = 0;
00083         switch (origin)
00084         {
00085         case kCurrent:
00086                 o = SEEK_CUR;
00087                 break;
00088         case kEnd:
00089                 o = SEEK_END;
00090                 break;
00091         case kStart:
00092                 o = SEEK_SET;
00093                 break;
00094         }
00095         
00096         if (this->fp == 0)
00097                 return -1;
00098         return (::fseek(this->fp, offset, o) == 0);
00099 }
00100 
00101 
00102 void OutStream::Flush()
00103 {
00104         if (this->fp)
00105                 ::fflush(this->fp);
00106 }
00107 
00108 
00109 
00110 
00111 
00112 
00113