#include <FileBlob.h>
Public Member Functions | |
FileBlob () | |
FileBlob (const std::string &fname, bool zip) | |
constructor from file to read | |
FileBlob (std::istream &is, bool zip) | |
constructor from stream to read | |
std::vector< unsigned char > * | getUncompressedBlob () const |
i didn't want to do two copies ... hope this works. | |
void | getUncompressedBlob (std::vector< unsigned char > &myblobcopy) const |
bool | isCompressed () const |
void | read (const std::string &) |
read from real file | |
void | read (std::istream &) |
read from istream | |
int | size () const |
void | write (std::ostream &) const |
write to ostream | |
void | write (const std::string &) const |
write to real file | |
~FileBlob () | |
Static Private Member Functions | |
static unsigned int | computeFileSize (const std::string &) |
static unsigned int | computeStreamSize (std::istream &) |
Private Attributes | |
std::vector< unsigned char > | blob |
bool | compressed |
unsigned int | isize |
Definition at line 8 of file FileBlob.h.
FileBlob::FileBlob | ( | ) | [inline] |
Definition at line 11 of file FileBlob.h.
{};
FileBlob::FileBlob | ( | const std::string & | fname, |
bool | zip | ||
) |
constructor from file to read
Definition at line 9 of file FileBlob.cc.
References blob, compressed, computeFileSize(), isize, and read().
:isize(0){ compressed = zip; /* std::cout << "isize = " << isize << " zip = " << (zip? "true" : "false") << std::endl; */ if (isize==0) isize= computeFileSize(fname); // std::cout << "isize = " << isize << std::endl; blob.reserve(isize); read(fname); }
FileBlob::FileBlob | ( | std::istream & | is, |
bool | zip | ||
) |
constructor from stream to read
Definition at line 21 of file FileBlob.cc.
References blob, compressed, computeStreamSize(), isize, and read().
:isize(0) { compressed = zip; if (isize==0) isize= computeStreamSize(is); blob.reserve(isize); read(is); }
FileBlob::~FileBlob | ( | ) | [inline] |
Definition at line 17 of file FileBlob.h.
{};
unsigned int FileBlob::computeFileSize | ( | const std::string & | fname | ) | [static, private] |
Definition at line 123 of file FileBlob.cc.
References computeStreamSize(), and compare_using_db::ifile.
Referenced by FileBlob().
{ unsigned int is=0; std::ifstream ifile(fname.c_str()); if (!ifile) { edm::LogError("FileBlob")<< "file " << fname << " does not exist...";} else is = computeStreamSize(ifile); ifile.close(); return is; }
unsigned int FileBlob::computeStreamSize | ( | std::istream & | is | ) | [static, private] |
Definition at line 132 of file FileBlob.cc.
References trackerHits::c.
Referenced by computeFileSize(), and FileBlob().
{ unsigned int rs=0; char c; while (is.get(c)) rs++; is.clear(); is.seekg(0); return rs; }
void FileBlob::getUncompressedBlob | ( | std::vector< unsigned char > & | myblobcopy | ) | const |
Definition at line 93 of file FileBlob.cc.
References blob, compressed, isize, and spu::zerr().
{ if(compressed) { myblobcopy.reserve(isize); uLongf destLen = isize; int zerr = uncompress(&*myblobcopy.begin(), &destLen, &*blob.begin(), blob.size()); if (zerr!=0 || myblobcopy.size()!=destLen) edm::LogError("FileBlob")<< "uncompressing error " << zerr << " original size was " << isize << " new size is " << destLen; }else{ myblobcopy = blob; } }
std::vector< unsigned char > * FileBlob::getUncompressedBlob | ( | ) | const |
i didn't want to do two copies ... hope this works.
Definition at line 74 of file FileBlob.cc.
References blob, compressed, isize, and spu::zerr().
{ std::vector<unsigned char>* newblob; if(compressed) { newblob = new std::vector<unsigned char>(isize); uLongf destLen = newblob->size(); // std::cout<<"Store isize = "<<isize<<"; newblob->size() = "<<newblob->size()<<"; destLen = "<<destLen<<std::endl; int zerr = uncompress(&*(newblob->begin()), &destLen, &*blob.begin(), blob.size()); if (zerr!=0 || newblob->size()!=destLen) edm::LogError("FileBlob")<< "uncompressing error " << zerr << " original size was " << isize << " new size is " << destLen; }else{ newblob = new std::vector<unsigned char>(blob); } return newblob; }
bool FileBlob::isCompressed | ( | ) | const [inline] |
void FileBlob::read | ( | const std::string & | fname | ) |
read from real file
Definition at line 110 of file FileBlob.cc.
References compare_using_db::ifile.
Referenced by FileBlob().
void FileBlob::read | ( | std::istream & | is | ) |
read from istream
Definition at line 28 of file FileBlob.cc.
References blob, trackerHits::c, compressed, recoMuon::in, isize, and spu::zerr().
{ if(compressed){ std::vector<unsigned char> in; in.reserve(isize); char c; while (is.get(c)) in.push_back((unsigned char)c); /* for(int i=0;i<in.size();i++){ std::cout<<in[i]; } std::cout<<std::endl; */ blob.resize(isize); uLongf destLen = compressBound(in.size()); int zerr = compress2(&*blob.begin(), &destLen, &*in.begin(), in.size(), 9); if (zerr!=0) edm::LogError("FileBlob")<< "Compression error " << zerr; blob.resize(destLen); }else{ //std::cout << "reading uncompressed" << std::endl; char c; while (is.get(c)) blob.push_back( (unsigned char)c); blob.resize(blob.size()); isize=blob.size(); } }
int FileBlob::size | ( | void | ) | const [inline] |
Definition at line 31 of file FileBlob.h.
References isize.
Referenced by popcon::DQMXMLFileSourceHandler::getNewObjects(), and popcon::DQMReferenceHistogramRootFileSourceHandler::getNewObjects().
{return isize;};
void FileBlob::write | ( | const std::string & | fname | ) | const |
write to real file
Definition at line 117 of file FileBlob.cc.
References interpolateCardsSimple::ofile.
void FileBlob::write | ( | std::ostream & | os | ) | const |
write to ostream
Definition at line 58 of file FileBlob.cc.
References blob, compressed, isize, dbtoconf::out, and spu::zerr().
{ if(compressed){ std::vector<unsigned char> out(isize); uLongf destLen = out.size(); int zerr = uncompress(&*out.begin(), &destLen, &*blob.begin(), blob.size()); if (zerr!=0 || out.size()!=destLen) edm::LogError("FileBlob")<< "uncompressing error " << zerr << " original size was " << isize << " new size is " << destLen; os.write((const char *)(&*out.begin()),out.size()); }else{ os.write((char *)&*blob.begin(),blob.size()); } }
std::vector<unsigned char> FileBlob::blob [private] |
Definition at line 40 of file FileBlob.h.
Referenced by FileBlob(), getUncompressedBlob(), read(), and write().
bool FileBlob::compressed [private] |
Definition at line 41 of file FileBlob.h.
Referenced by FileBlob(), getUncompressedBlob(), isCompressed(), read(), and write().
unsigned int FileBlob::isize [private] |
Definition at line 42 of file FileBlob.h.
Referenced by FileBlob(), getUncompressedBlob(), read(), size(), and write().