File indexing completed on 2024-04-06 12:22:31
0001 #include "MagneticField/Interpolation/interface/binary_ifstream.h"
0002
0003 #include <cstdio>
0004 #include <iostream>
0005
0006 namespace magneticfield::interpolation {
0007 struct binary_ifstream_error {};
0008
0009 binary_ifstream::binary_ifstream(const char* name) : file_(nullptr) { init(name); }
0010
0011 binary_ifstream::binary_ifstream(const std::string& name) : file_(nullptr) { init(name.c_str()); }
0012
0013 void binary_ifstream::init(const char* name) {
0014 file_ = fopen(name, "rb");
0015 if (file_ == nullptr) {
0016 std::cout << "file " << name << " cannot be opened for reading" << std::endl;
0017 throw binary_ifstream_error();
0018 }
0019 }
0020
0021 binary_ifstream::binary_ifstream(binary_ifstream&& iOther) : file_(iOther.file_) { iOther.file_ = nullptr; }
0022
0023 binary_ifstream& binary_ifstream::operator=(binary_ifstream&& iOther) {
0024 binary_ifstream temp{std::move(iOther)};
0025 std::swap(file_, temp.file_);
0026 return *this;
0027 }
0028
0029 binary_ifstream::~binary_ifstream() { close(); }
0030 void binary_ifstream::close() {
0031 if (file_ != nullptr)
0032 fclose(file_);
0033 file_ = nullptr;
0034 }
0035
0036 binary_ifstream& binary_ifstream::operator>>(char& n) {
0037 n = static_cast<char>(fgetc(file_));
0038 return *this;
0039 }
0040
0041 binary_ifstream& binary_ifstream::operator>>(unsigned char& n) {
0042 n = static_cast<unsigned char>(fgetc(file_));
0043 return *this;
0044 }
0045
0046 binary_ifstream& binary_ifstream::operator>>(short& n) {
0047 fread(&n, sizeof(n), 1, file_);
0048 return *this;
0049 }
0050 binary_ifstream& binary_ifstream::operator>>(unsigned short& n) {
0051 fread(&n, sizeof(n), 1, file_);
0052 return *this;
0053 }
0054 binary_ifstream& binary_ifstream::operator>>(int& n) {
0055 fread(&n, sizeof(n), 1, file_);
0056 return *this;
0057 }
0058 binary_ifstream& binary_ifstream::operator>>(unsigned int& n) {
0059 fread(&n, sizeof(n), 1, file_);
0060 return *this;
0061 }
0062
0063 binary_ifstream& binary_ifstream::operator>>(long& n) {
0064 fread(&n, sizeof(n), 1, file_);
0065 return *this;
0066 }
0067 binary_ifstream& binary_ifstream::operator>>(unsigned long& n) {
0068 fread(&n, sizeof(n), 1, file_);
0069 return *this;
0070 }
0071
0072 binary_ifstream& binary_ifstream::operator>>(float& n) {
0073 fread(&n, sizeof(n), 1, file_);
0074 return *this;
0075 }
0076 binary_ifstream& binary_ifstream::operator>>(double& n) {
0077 fread(&n, sizeof(n), 1, file_);
0078 return *this;
0079 }
0080
0081 binary_ifstream& binary_ifstream::operator>>(bool& n) {
0082 n = static_cast<bool>(fgetc(file_));
0083 return *this;
0084 }
0085
0086 binary_ifstream& binary_ifstream::operator>>(std::string& n) {
0087 unsigned int nchar;
0088 (*this) >> nchar;
0089 char* tmp = new char[nchar + 1];
0090 unsigned int nread = fread(tmp, 1, nchar, file_);
0091 if (nread != nchar)
0092 std::cout << "binary_ifstream error: read less then expected " << std::endl;
0093 n.assign(tmp, nread);
0094 delete[] tmp;
0095 return *this;
0096 }
0097
0098 bool binary_ifstream::good() const { return !bad() && !eof(); }
0099
0100 bool binary_ifstream::eof() const { return feof(file_); }
0101
0102 bool binary_ifstream::fail() const { return file_ == nullptr || ferror(file_) != 0; }
0103
0104
0105 bool binary_ifstream::bad() const { return fail(); }
0106
0107 bool binary_ifstream::operator!() const { return fail() || bad() || eof(); }
0108
0109
0110
0111 binary_ifstream::operator bool() const { return good(); }
0112
0113 long binary_ifstream::tellg() { return ftell(file_); }
0114
0115 binary_ifstream& binary_ifstream::seekg(long to) {
0116
0117 fseek(file_, to, SEEK_SET);
0118 return *this;
0119 }
0120
0121 }