{
m_gzFile = gzopen(filename.c_str(),
(mode == File::Write) ? "wb" : "rb");
+
+ if (mode == File::Read && m_gzFile) {
+ m_endOffset = gzseek(m_gzFile, 0, SEEK_END);
+ gzrewind(m_gzFile);
+ }
+
return m_gzFile != NULL;
}
{
return false;
}
+
+int ZLibFile::rawPercentRead()
+{
+ return 100 * (gztell(m_gzFile) / m_endOffset);
+}
void flush(void);
int getc();
bool skip(size_t length);
+ int percentRead();
virtual bool supportsOffsets() const = 0;
virtual File::Offset currentOffset();
virtual void rawClose() = 0;
virtual void rawFlush() = 0;
virtual bool rawSkip(size_t length) = 0;
+ virtual int rawPercentRead() = 0;
protected:
std::string m_filename;
return rawRead(buffer, length);
}
+inline int File::percentRead()
+{
+ if (!m_isOpened || m_mode != File::Read) {
+ return 0;
+ }
+ return rawPercentRead();
+}
+
inline void File::close()
{
if (m_isOpened) {
virtual void rawClose();
virtual void rawFlush();
virtual bool rawSkip(size_t length);
+ virtual int rawPercentRead();
private:
void *m_gzFile;
+ double m_endOffset;
};
inline bool
int numOfFrames = 0;
int numOfCalls = 0;
unsigned callNum = 0;
+ int lastPercentReport = 0;
startOffset = m_parser.currentOffset();
callNum = m_parser.currentCallNumber();
m_frameOffsets[numOfFrames] = frameOffset;
++numOfFrames;
+ if (m_parser.percentRead() - lastPercentReport >= 5) {
+ std::cerr << "\tPercent scanned = "
+ << m_parser.percentRead()
+ << "..."<<std::endl;
+ lastPercentReport = m_parser.percentRead();
+ }
startOffset = endOffset;
callNum = m_parser.currentCallNumber();
numOfCalls = 0;
next_call_no = num;
}
+ int percentRead()
+ {
+ return file->percentRead();
+ }
+
Call *scan_call();
protected:
//read in the initial buffer if we're reading
if (m_stream.is_open() && mode == File::Read) {
+ m_stream.seekg(0, std::ios::end);
+ m_endPos = m_stream.tellg();
+ m_stream.seekg(0, std::ios::beg);
+
// read the snappy file identifier
unsigned char byte1, byte2;
m_stream >> byte1;
return true;
}
+
+int SnappyFile::rawPercentRead()
+{
+ return 100 * (double(m_stream.tellg()) / double(m_endPos));
+}
virtual void rawClose();
virtual void rawFlush();
virtual bool rawSkip(size_t length);
+ virtual int rawPercentRead();
private:
inline size_t usedCacheSize() const
char *m_compressedCache;
File::Offset m_currentOffset;
+ std::streampos m_endPos;
};
}