home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 110 / EnigmaAmiga110CD.iso / indispensabili / utility / apdf / xpdf-0.80 / xpdf / mystdio.h < prev    next >
C/C++ Source or Header  |  1999-06-20  |  1KB  |  56 lines

  1. //========================================================================
  2. //
  3. // mystdio.h
  4. //
  5. // Copyright 1999 Emmanuel Lesueur
  6. //
  7. //========================================================================
  8.  
  9. #ifndef MYSTDIO_H
  10. #define MYSTDIO_H
  11.  
  12. class myFILE {
  13.   public:
  14.     myFILE(const char*);
  15.     ~myFILE();
  16.     size_t read(void*,size_t);
  17.     int seek(long,int);
  18.     long tell() const { return pos; }
  19.     void rewind() { pos=0; }
  20.     static void bufsizes(size_t chunk_size,size_t max_size);
  21.   private:
  22.     class chunk {
  23.       public:
  24.     chunk() : buf(NULL) {}
  25.     ~chunk() { delete [] buf; }
  26.     chunk* next;
  27.     chunk* prev;
  28.     unsigned char* buf;
  29.     };
  30.     size_t pos;
  31.     chunk* chunks;
  32.     unsigned num_chunks;
  33.     size_t chunk_size;
  34.     long file;
  35.     size_t total_size;
  36.     int max_loaded_chunks;
  37.     int num_loaded_chunks;
  38.     chunk* loaded_chunks;
  39.     chunk* oldest_chunk;
  40.     size_t last_pos;
  41.     static size_t glb_chunk_size;
  42.     static size_t max_buf;
  43. };
  44.  
  45. myFILE* myfopen(const char*,const char*);
  46. inline int myfclose(myFILE* f) { delete f; }
  47. inline size_t myfread(void* buf,size_t bsize,size_t n,myFILE* f) {
  48.     return f->read(buf,n*bsize)/bsize;
  49. }
  50. inline int myfseek(myFILE* f,long pos,int mode) { return f->seek(pos,mode); }
  51. inline long myftell(myFILE* f) { return f->tell(); }
  52. inline void myrewind(myFILE* f) { return f->rewind(); }
  53.  
  54. #endif
  55.  
  56.