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