odfilebuf.h

来自「支持各种栅格图像和矢量图像读取的库」· C头文件 代码 · 共 154 行

H
154
字号
#ifndef ODFILEBUF_DEFINED#define ODFILEBUF_DEFINED#include <stdio.h>#include "DbSystemServices.h"#include "OdString.h"#include "RxObjectImpl.h"////////////////////////////////////////////////////////////#define ERR_VAL ((OdUInt32)-1)class OdBaseFileBuf : public OdRxObjectImpl<OdStreamBuf>{  OdBaseFileBuf(const OdBaseFileBuf&);  OdBaseFileBuf& operator = (const OdBaseFileBuf&);public:          OdBaseFileBuf();  virtual ~OdBaseFileBuf()  {}  virtual void      open(    const OdChar* path,     Oda::FileShareMode shMode/* = Oda::kShareDenyNo*/,     Oda::FileAccessMode nDesiredAccess/* = Oda::kFileRead*/,     Oda::FileCreationDisposition nCreationDisposition/* = Oda::kOpenExisting*/) = 0;  virtual void      close();  virtual OdString  fileName() { return m_FileName; }protected:  FILE *              m_fp;  OdString            m_FileName;  OdUInt32            m_length;  Oda::FileShareMode  m_shMode;  void open(const OdChar *path, const char * mode);};class OdWrFileBuf;typedef OdSmartPtr<OdWrFileBuf> OdWrFileBufPtr;/////////////////////////////////////////////////////////////class OdWrFileBuf : public OdBaseFileBuf{  OdWrFileBuf(const OdWrFileBuf&);  OdWrFileBuf& operator = (const OdWrFileBuf&);  OdUInt32  m_position;public:  OdWrFileBuf(const OdChar *path) { open(path); }  OdWrFileBuf(const OdChar *path, Oda::FileShareMode shMode) { open(path, shMode); }  OdWrFileBuf();  ~OdWrFileBuf();  static OdWrFileBufPtr createObject()  {    return OdWrFileBufPtr(new OdWrFileBuf(), kOdRxObjAttach);  }  static OdWrFileBufPtr createObject(const OdChar *path, Oda::FileShareMode shMode = Oda::kShareDenyNo)  {    return OdWrFileBufPtr(new OdWrFileBuf(path, shMode), kOdRxObjAttach);  }  virtual void open(    const OdChar* path,     Oda::FileShareMode shMode = Oda::kShareDenyNo,     Oda::FileAccessMode nDesiredAccess = Oda::kFileWrite,     Oda::FileCreationDisposition nCreationDisposition = Oda::kCreateAlways);  virtual void close();  // OdStreamBuf methods  virtual OdUInt32  length();  virtual OdUInt32  seek(OdInt32 offset, OdDb::FilerSeekType whence);  virtual OdUInt32  tell();  virtual bool      isEof();  virtual void      putByte(OdUInt8 val);  virtual void      putBytes(const void* buffer, OdUInt32 nLen);  virtual OdUInt32  getShareMode();};//////////////////////////////////////////////////////////////////////#define NUM_BUFFERS 8class OdRdFileBuf;typedef OdSmartPtr<OdRdFileBuf> OdRdFileBufPtr;class OdRdFileBuf : public OdBaseFileBuf{  OdRdFileBuf(const OdRdFileBuf&);  OdRdFileBuf& operator = (const OdRdFileBuf&);public:  OdRdFileBuf(const OdChar *path) : m_Counter(0L) { init(); open(path); }  OdRdFileBuf(const OdChar *path, Oda::FileShareMode shMode) : m_Counter(0L)  {     init();    open(path, shMode);   }  OdRdFileBuf();  static OdRdFileBufPtr createObject()  {    return OdRdFileBufPtr(new OdRdFileBuf(), kOdRxObjAttach);  }  static OdRdFileBufPtr createObject(const OdChar *path, Oda::FileShareMode shMode = Oda::kShareDenyNo)  {    return OdRdFileBufPtr(new OdRdFileBuf(path, shMode), kOdRxObjAttach);  }  ~OdRdFileBuf();  virtual void open(    const OdChar* path,     Oda::FileShareMode shMode = Oda::kShareDenyNo,     Oda::FileAccessMode nDesiredAccess = Oda::kFileRead,     Oda::FileCreationDisposition nCreationDisposition = Oda::kOpenExisting);  virtual void close();  virtual OdUInt32  length();  virtual OdUInt32  seek(OdInt32 offset, OdDb::FilerSeekType whence);  virtual OdUInt32  tell();  virtual bool      isEof();  virtual OdUInt8   getByte();  virtual void      getBytes(void* buffer, OdUInt32 nLen);  virtual OdUInt32  getShareMode();protected:  struct blockstru  {    OdUInt8*  buf;        /* this buffer */    OdUInt32  startaddr;  /* address from which it came in the file */    int       validbytes; /* number of valid bytes it holds */    OdInt32   counter;    /* least recently used counter */  };  OdUInt32  m_PhysFilePos; /* where the file pointer is */  OdUInt32  m_BufPos;      /* position from which buf was filled */  int       m_BytesLeft;   /* bytes left in buf */  int       m_BufBytes;    /* valid bytes read into buffer */  OdUInt8*  m_pNextChar;   /* pointer to next char in buffer */  OdUInt8*  m_pCurBuf;     /* pointer to the buffer currently being used */  int       m_UsingBlock;  /* which block is currently in use */  struct blockstru         /* the data being held */            m_DataBlock[NUM_BUFFERS];  static const int m_BufSize; /* size of each read buffer */  static const int  m_PosMask; /* mask to allow position check */  OdInt32    m_Counter;  bool filbuf();  void init();};#endif // ODFILEBUF_DEFINED

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?