LMMS
Loading...
Searching...
No Matches
Data_Reader.h
Go to the documentation of this file.
1// Data reader interface for uniform access
2
3// File_Extractor 0.4.0
4#ifndef DATA_READER_H
5#define DATA_READER_H
6
7#include "blargg_common.h"
8
9// Supports reading and finding out how many bytes are remaining
11public:
12 virtual ~Data_Reader() { }
13
14 static const char eof_error []; // returned by read() when request goes beyond end
15
16 // Read at most count bytes and return number actually read, or <= 0 if error
17 virtual long read_avail( void*, long n ) = 0;
18
19 // Read exactly count bytes and return error if they couldn't be read
20 virtual blargg_err_t read( void*, long count );
21
22 // Number of bytes remaining until end of file
23 virtual long remain() const = 0;
24
25 // Read and discard count bytes
26 virtual blargg_err_t skip( long count );
27
28public:
30 typedef blargg_err_t error_t; // deprecated
31private:
32 // noncopyable
35};
36
37// Supports seeking in addition to Data_Reader operations
38class File_Reader : public Data_Reader {
39public:
40 // Size of file
41 virtual long size() const = 0;
42
43 // Current position in file
44 virtual long tell() const = 0;
45
46 // Go to new position
47 virtual blargg_err_t seek( long ) = 0;
48
49 long remain() const;
50 blargg_err_t skip( long n );
51};
52
53// Disk file reader
55public:
56 blargg_err_t open( const char* path );
57 void close();
58
59public:
62 long size() const;
63 blargg_err_t read( void*, long );
64 long read_avail( void*, long );
65 long tell() const;
66 blargg_err_t seek( long );
67private:
68 void* file_;
69};
70
71// Treats range of memory as a file
73public:
74 Mem_File_Reader( const void*, long size );
75
76public:
77 long size() const;
78 long read_avail( void*, long );
79 long tell() const;
80 blargg_err_t seek( long );
81private:
82 const char* const begin;
83 const long size_;
84 long pos;
85};
86
87// Makes it look like there are only count bytes remaining
88class Subset_Reader : public Data_Reader {
89public:
91
92public:
93 long remain() const;
94 long read_avail( void*, long );
95private:
97 long remain_;
98};
99
100// Joins already-read header and remaining data into original file (to avoid seeking)
102public:
103 Remaining_Reader( void const* header, long size, Data_Reader* );
104
105public:
106 long remain() const;
107 long read_avail( void*, long );
108 blargg_err_t read( void*, long );
109private:
110 char const* header;
111 char const* header_end;
113 long read_first( void* out, long count );
114};
115
116// Invokes callback function to read data. Size of data must be specified in advance.
118public:
119 typedef const char* (*callback_t)( void* data, void* out, int count );
120 Callback_Reader( callback_t, long size, void* data = 0 );
121public:
122 long read_avail( void*, long );
123 blargg_err_t read( void*, long );
124 long remain() const;
125private:
127 void* const data;
129};
130
131#ifdef HAVE_ZLIB_H
132#include <zlib.h>
133
134// Gzip compressed file reader
135class Gzip_File_Reader : public File_Reader {
136public:
137 blargg_err_t open( const char* path );
138 void close();
139
140public:
141 Gzip_File_Reader();
142 ~Gzip_File_Reader();
143 long size() const;
144 long read_avail( void*, long );
145 long tell() const;
146 blargg_err_t seek( long );
147private:
148 gzFile file_;
149 long size_;
150};
151#endif
152
153#endif
const char *(* callback_t)(void *data, void *out, int count)
Definition Data_Reader.h:119
void *const data
Definition Data_Reader.h:127
callback_t const callback
Definition Data_Reader.h:126
long remain() const
Definition Data_Reader.cpp:170
blargg_err_t read(void *, long)
Definition Data_Reader.cpp:181
long remain_
Definition Data_Reader.h:128
Callback_Reader(callback_t, long size, void *data=0)
Definition Data_Reader.cpp:163
long read_avail(void *, long)
Definition Data_Reader.cpp:172
virtual blargg_err_t skip(long count)
Definition Data_Reader.cpp:39
blargg_err_t error_t
Definition Data_Reader.h:30
static const char eof_error[]
Definition Data_Reader.h:14
Data_Reader & operator=(const Data_Reader &)
virtual long remain() const =0
virtual blargg_err_t read(void *, long count)
Definition Data_Reader.cpp:25
Data_Reader()
Definition Data_Reader.h:29
virtual ~Data_Reader()
Definition Data_Reader.h:12
virtual long read_avail(void *, long n)=0
Data_Reader(const Data_Reader &)
Definition Data_Reader.h:38
virtual blargg_err_t seek(long)=0
blargg_err_t skip(long n)
Definition Data_Reader.cpp:55
long remain() const
Definition Data_Reader.cpp:53
virtual long size() const =0
virtual long tell() const =0
const long size_
Definition Data_Reader.h:83
long read_avail(void *, long)
Definition Data_Reader.cpp:141
long size() const
Definition Data_Reader.cpp:139
Mem_File_Reader(const void *, long size)
Definition Data_Reader.cpp:132
const char *const begin
Definition Data_Reader.h:82
blargg_err_t seek(long)
Definition Data_Reader.cpp:153
long tell() const
Definition Data_Reader.cpp:151
long pos
Definition Data_Reader.h:84
Remaining_Reader(void const *header, long size, Data_Reader *)
Definition Data_Reader.cpp:85
long read_avail(void *, long)
Definition Data_Reader.cpp:108
Data_Reader * in
Definition Data_Reader.h:112
blargg_err_t read(void *, long)
Definition Data_Reader.cpp:121
long remain() const
Definition Data_Reader.cpp:92
char const * header
Definition Data_Reader.h:110
long read_first(void *out, long count)
Definition Data_Reader.cpp:94
char const * header_end
Definition Data_Reader.h:111
Std_File_Reader()
Definition Data_Reader.cpp:190
long size() const
Definition Data_Reader.cpp:202
void close()
Definition Data_Reader.cpp:236
~Std_File_Reader()
Definition Data_Reader.cpp:192
long read_avail(void *, long)
Definition Data_Reader.cpp:211
void * file_
Definition Data_Reader.h:68
blargg_err_t seek(long)
Definition Data_Reader.cpp:227
blargg_err_t open(const char *path)
Definition Data_Reader.cpp:194
blargg_err_t read(void *, long)
Definition Data_Reader.cpp:216
long tell() const
Definition Data_Reader.cpp:225
Subset_Reader(Data_Reader *, long count)
Definition Data_Reader.cpp:65
long remain() const
Definition Data_Reader.cpp:73
long remain_
Definition Data_Reader.h:97
long read_avail(void *, long)
Definition Data_Reader.cpp:75
Data_Reader * in
Definition Data_Reader.h:96
float out
Definition lilv_test.c:1461
int n
Definition crypt.c:458
ulg size
Definition extract.c:2350
_WDL_CSTRING_PREFIX void INT_PTR count
Definition wdlcstring.h:263
voidp gzFile
Definition zlib.h:1067