X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fbase%2Frawfile.h;h=a1c73d6ad6acae3001b4822a97fcbf207559f1c0;hp=bb39dc6e82a0363797fa4b0a156145cf7268887b;hb=a7175f3218cbb81c7c1cd07a8092e5a2b30dac44;hpb=81b7cc6b1815ec6f0f0c42d6a826d56c8b35033b diff --git a/lib/base/rawfile.h b/lib/base/rawfile.h index bb39dc6..a1c73d6 100644 --- a/lib/base/rawfile.h +++ b/lib/base/rawfile.h @@ -2,58 +2,24 @@ #define __lib_base_rawfile_h #include -#include -class iDataSource: public iObject +class eRawFile { public: - virtual off_t lseek(off_t offset, int whence)=0; - virtual ssize_t read(void *buf, size_t count)=0; /* NOTE: you must be able to handle short reads! */ - virtual off_t length()=0; - virtual off_t position()=0; - virtual int valid()=0; - virtual eSingleLock &getLock()=0; - virtual bool is_shared()=0; -}; - -class iDataSourcePositionRestorer -{ - ePtr &m_source; - off_t m_position; -public: - iDataSourcePositionRestorer(ePtr &source) - :m_source(source) - { - if (m_source->is_shared()) - m_position = m_source->position(); - } - ~iDataSourcePositionRestorer() - { - if (m_source->is_shared()) - m_source->lseek(m_position, SEEK_SET); - } -}; - -class eRawFile: public iDataSource -{ - DECLARE_REF(eRawFile); - eSingleLock m_lock; -public: eRawFile(); ~eRawFile(); + int open(const char *filename, int cached = 0); void setfd(int fd); off_t lseek(off_t offset, int whence); int close(); ssize_t read(void *buf, size_t count); /* NOTE: you must be able to handle short reads! */ off_t length(); - off_t position(); int valid(); - eSingleLock &getLock(); - bool is_shared() { return ref.count > 1; } private: int m_fd; /* for uncached */ FILE *m_file; /* for cached */ + int m_cached; std::string m_basename; off_t m_splitsize, m_totallength, m_current_offset, m_base_offset, m_last_offset;