/**********************************************************************
This file is part of Crack dot Com's free source code release of Golgotha.
for information about compiling & licensing issues visit this URL
 If that doesn't help, contact Jonathan Clark at 
  golgotha_source@usa.net (Subject should have "GOLG" in it) 
***********************************************************************/

#ifndef __I4BUF_FILE_HPP
#define __I4BUF_FILE_HPP

#include "file/file.hh"


// This file provides buffering for another i4_file_class

class i4_buffered_file_class : public i4_file_class
{
protected:
  friend void i4_async_buf_read_callback(w32 count, void *context);
  i4_file_class *from;
  void *buf;
  w32 buf_size,buf_start,buf_end,offset;
  i4_bool write_file;
public:
  i4_buffered_file_class(i4_file_class *from, 
                         w32 buffer_size=0x1000,
                         w32 current_offset=0);


  virtual w32 read (void *buffer, w32 size);
  virtual w32 write(const void *buffer, w32 size);
  virtual w32 seek (w32 offset);
  virtual w32 size ();
  virtual w32 tell ();

  virtual i4_bool async_read (void *buffer, w32 size, 
                              async_callback call,
                              void *context);

  ~i4_buffered_file_class();
};

#endif