CMS 3D CMS Logo

StreamerFileIO.cc
Go to the documentation of this file.
2 #include <fstream>
3 #include <iostream>
6 
7 namespace edm::streamer {
9  : current_offset_(1),
10  do_adler_(false),
11  adlera_(1),
12  adlerb_(0),
13  ost_(new std::ofstream(name.c_str(), std::ios_base::binary | std::ios_base::out)),
14  filename_(name) {
15  if (!ost_->is_open()) {
16  throw cms::Exception("OutputFile", "OutputFile") << "Error Opening Output File: " << name << "\n";
17  }
18  ost_->rdbuf()->pubsetbuf(nullptr, 0);
19  }
20 
21  OutputFile::~OutputFile() { ost_->close(); }
22 
23  bool OutputFile::write(const char* ptr, size_t n) {
24  ost_->write(ptr, n);
25  if (!ost_->fail()) {
26  current_offset_ += (uint64)(n);
27  if (do_adler_)
28  cms::Adler32(ptr, n, adlera_, adlerb_);
29  return false;
30  }
31  return true;
32  }
33 
34  void OutputFile::close() { ost_->close(); }
35 } // namespace edm::streamer
edm::propagate_const< std::shared_ptr< std::ofstream > > ost_
OutputFile(const std::string &name)
bool write(const char *ptr, size_t n)
void Adler32(char const *data, size_t len, uint32_t &a, uint32_t &b)
unsigned long long uint64
Definition: MsgTools.h:14