73 lines
1.7 KiB
C++
73 lines
1.7 KiB
C++
#ifndef INCLUDED_FILEIO_MMAP_H
|
|
#define INCLUDED_FILEIO_MMAP_H
|
|
|
|
#include <sys/types.h>
|
|
|
|
#include "eca-fileio.h"
|
|
|
|
#ifndef MAP_FAILED
|
|
#define MAP_FAILED ((__ptr_t) -1)
|
|
#endif
|
|
|
|
#if !defined _CADDR_T && !defined __USE_BSD
|
|
#define _CADDR_T
|
|
typedef char* caddr_t;
|
|
#endif
|
|
|
|
/**
|
|
* File-io and buffering using mmap for data transfers.
|
|
*/
|
|
class ECA_FILE_IO_MMAP : public ECA_FILE_IO {
|
|
|
|
public:
|
|
|
|
ECA_FILE_IO_MMAP(void);
|
|
virtual ~ECA_FILE_IO_MMAP(void);
|
|
|
|
// --
|
|
// Open/close routines
|
|
// ---
|
|
virtual void open_file(const std::string& fname, const std::string& fmode);
|
|
virtual void open_stdin(void) { }
|
|
virtual void open_stdout(void) { }
|
|
virtual void open_stderr(void) { }
|
|
virtual void close_file(void);
|
|
|
|
// --
|
|
// Normal file operations
|
|
// ---
|
|
virtual void read_to_buffer(void* obuf, off_t bytes);
|
|
virtual void write_from_buffer(void* obuf, off_t bytes);
|
|
|
|
virtual void set_file_position(off_t newpos) { set_file_position(newpos,true); }
|
|
virtual void set_file_position(off_t newpos, bool seek);
|
|
virtual void set_file_position_advance(off_t fw);
|
|
virtual void set_file_position_end(void);
|
|
virtual off_t get_file_position(void) const;
|
|
virtual off_t get_file_length(void) const;
|
|
|
|
// --
|
|
// Status
|
|
// ---
|
|
virtual bool is_file_ready(void) const;
|
|
virtual bool is_file_error(void) const;
|
|
virtual bool is_file_ended(void) const;
|
|
virtual off_t file_bytes_processed(void) const;
|
|
virtual const std::string& file_mode(void) const { return(mode_rep); }
|
|
|
|
private:
|
|
|
|
int fd_rep;
|
|
caddr_t buffer_repp;
|
|
off_t bytes_rep;
|
|
off_t fposition_rep;
|
|
off_t flength_rep;
|
|
|
|
bool file_ready_rep;
|
|
bool file_ended_rep;
|
|
std::string mode_rep;
|
|
std::string fname_rep;
|
|
};
|
|
|
|
#endif
|