1 //============================================================================== 2 // 3 // This file is part of GPSTk, the GPS Toolkit. 4 // 5 // The GPSTk is free software; you can redistribute it and/or modify 6 // it under the terms of the GNU Lesser General Public License as published 7 // by the Free Software Foundation; either version 3.0 of the License, or 8 // any later version. 9 // 10 // The GPSTk is distributed in the hope that it will be useful, 11 // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 // GNU Lesser General Public License for more details. 14 // 15 // You should have received a copy of the GNU Lesser General Public 16 // License along with GPSTk; if not, write to the Free Software Foundation, 17 // Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA 18 // 19 // This software was developed by Applied Research Laboratories at the 20 // University of Texas at Austin. 21 // Copyright 2004-2020, The Board of Regents of The University of Texas System 22 // 23 //============================================================================== 24 25 //============================================================================== 26 // 27 // This software was developed by Applied Research Laboratories at the 28 // University of Texas at Austin, under contract to an agency or agencies 29 // within the U.S. Department of Defense. The U.S. Government retains all 30 // rights to use, duplicate, distribute, disclose, or release this software. 31 // 32 // Pursuant to DoD Directive 523024 33 // 34 // DISTRIBUTION STATEMENT A: This software has been approved for public 35 // release, distribution is unlimited. 36 // 37 //============================================================================== 38 39 /** 40 * @file FFBinaryStream.cpp 41 * An FFStream for binary file reading 42 */ 43 44 #include "FFBinaryStream.hpp" 45 46 namespace gpstk 47 { 48 FFBinaryStream :: FFBinaryStream()49 FFBinaryStream() 50 { 51 // nothing to do 52 } 53 54 55 FFBinaryStream :: ~FFBinaryStream()56 ~FFBinaryStream() 57 { 58 // nothing to do 59 } 60 61 62 FFBinaryStream :: FFBinaryStream(const char * fn,std::ios::openmode mode)63 FFBinaryStream(const char* fn, 64 std::ios::openmode mode) 65 : FFStream(fn, mode|std::ios::binary) 66 { 67 } 68 69 70 void FFBinaryStream :: open(const char * fn,std::ios::openmode mode)71 open(const char* fn, std::ios::openmode mode) 72 { 73 FFStream::open(fn, mode|std::ios::binary); 74 } 75 76 77 void FFBinaryStream :: getData(char * buff,size_t length)78 getData(char* buff, size_t length) 79 { 80 try 81 { 82 read(buff, length); 83 } 84 catch(std::exception& exc) 85 { 86 if (gcount() != (std::streamsize)length && eof()) 87 { 88 EndOfFile err("EOF encountered"); 89 GPSTK_THROW(err); 90 } 91 else 92 { 93 FFStreamError err(exc.what()); 94 std::cout << err << std::endl; 95 GPSTK_THROW(err); 96 } 97 } 98 catch(...) 99 { 100 FFStreamError err("Unknown exception"); 101 GPSTK_THROW(err); 102 } 103 } // end of getData(char*, size_t)) 104 105 106 void FFBinaryStream :: writeData(const char * buff,size_t length)107 writeData(const char* buff, size_t length) 108 { 109 try 110 { 111 write(buff, length); 112 } 113 catch(std::exception& exc) 114 { 115 FFStreamError err(exc.what()); 116 GPSTK_THROW(err); 117 } 118 catch(...) 119 { 120 FFStreamError err("Unknown exception"); 121 GPSTK_THROW(err); 122 } 123 124 if (fail() || bad()) 125 { 126 FFStreamError err("Error writing data"); 127 GPSTK_THROW(err); 128 } 129 return; 130 } // end of writeData(const char*, size_t) 131 } // namespace gpstk 132