ram_file.hh 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. /********************************************************************** <BR>
  2. This file is part of Crack dot Com's free source code release of
  3. Golgotha. <a href="http://www.crack.com/golgotha_release"> <BR> for
  4. information about compiling & licensing issues visit this URL</a>
  5. <PRE> If that doesn't help, contact Jonathan Clark at
  6. golgotha_source@usa.net (Subject should have "GOLG" in it)
  7. ***********************************************************************/
  8. #ifndef I4_RAM_FILE_HH
  9. #define I4_RAM_FILE_HH
  10. #include "file/file.hh"
  11. #include <memory.h>
  12. class i4_ram_file_class : public i4_file_class
  13. {
  14. w8 *buf;
  15. w32 bs, offset;
  16. public:
  17. virtual i4_file_class *dup()
  18. {
  19. i4_file_class *f=new i4_ram_file_class(buf, bs);
  20. f->seek(tell());
  21. return f;
  22. }
  23. i4_ram_file_class(void *buffer, int buffer_size)
  24. : buf((w8 *)buffer), bs(buffer_size), offset(0) { ; }
  25. virtual w32 read (void *buffer, w32 size)
  26. {
  27. if (size>bs-offset)
  28. size=bs-offset;
  29. memcpy(buffer, buf+offset, size);
  30. offset+=size;
  31. return size;
  32. }
  33. virtual w32 write(const void *buffer, w32 size)
  34. {
  35. if (size>bs-offset)
  36. size=bs-offset;
  37. memcpy(buf+offset, buffer, size);
  38. offset+=size;
  39. return size;
  40. }
  41. virtual w32 seek (w32 _offset) { offset=_offset; return offset; }
  42. virtual w32 size () { return bs; }
  43. virtual w32 tell () { return offset; }
  44. };
  45. #endif