annotate Plugins/Input/console/abstract_file.h @ 334:0daaddb10914 trunk

[svn] Implement GYM playback.
author chainsaw
date Sun, 25 Dec 2005 13:31:46 -0800
parents 252843aac42f
children 0b9507985f0d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
90
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
1
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
2 // Abstract file access interfaces
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
3
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
4 // Copyright (C) 2005 Shay Green. MIT license.
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
5
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
6 #ifndef ABSTRACT_FILE_H
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
7 #define ABSTRACT_FILE_H
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
8
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
9 #include <stdio.h>
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
10
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
11 // to do: built-in buffering?
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
12
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
13 class Data_Reader {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
14 // noncopyable
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
15 Data_Reader( const Data_Reader& );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
16 Data_Reader& operator = ( const Data_Reader& );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
17 public:
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
18 Data_Reader() { }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
19 virtual ~Data_Reader() { }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
20
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
21 // NULL on success, otherwise error string
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
22 typedef const char* error_t;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
23
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
24 // Read at most 'n' bytes. Return number of bytes read, negative
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
25 // value if error.
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
26 virtual long read_avail( void*, long n ) = 0;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
27
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
28 // Read exactly 'n' bytes (error if fewer are available). NULL on success,
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
29 // otherwise error string.
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
30 virtual error_t read( void*, long );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
31
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
32 // Number of bytes remaining
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
33 virtual long remain() const = 0;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
34
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
35 // Skip forwards by 'n' bytes.
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
36 virtual error_t skip( long n );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
37
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
38 // to do: bytes remaining = LONG_MAX when unknown?
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
39 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
40
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
41 class File_Reader : public Data_Reader {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
42 public:
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
43 // Size of file
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
44 virtual long size() const = 0;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
45
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
46 // Current position in file
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
47 virtual long tell() const = 0;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
48
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
49 // Change position in file
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
50 virtual error_t seek( long ) = 0;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
51
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
52 virtual long remain() const;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
53
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
54 error_t skip( long n );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
55 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
56
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
57 class Subset_Reader : public Data_Reader {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
58 Data_Reader* in;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
59 long remain_;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
60 public:
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
61 Subset_Reader( Data_Reader*, long size );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
62 long remain() const;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
63 long read_avail( void*, long );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
64 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
65
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
66 class Mem_File_Reader : public File_Reader {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
67 const char* const begin;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
68 long pos;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
69 const long size_;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
70 public:
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
71 Mem_File_Reader( const void*, long size );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
72
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
73 long size() const;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
74 long read_avail( void*, long );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
75
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
76 long tell() const;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
77 error_t seek( long );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
78 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
79
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
80 class Std_File_Reader : public File_Reader {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
81 FILE* file;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
82 //FILE* owned_file;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
83 public:
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
84 Std_File_Reader();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
85 ~Std_File_Reader();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
86
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
87 error_t open( const char* );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
88
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
89 // Forward read requests to file. Caller must close file later.
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
90 //void forward( FILE* );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
91
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
92 long size() const;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
93 long read_avail( void*, long );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
94
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
95 long tell() const;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
96 error_t seek( long );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
97
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
98 void close();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
99 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
100
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
101 class Data_Writer {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
102 // noncopyable
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
103 Data_Writer( const Data_Writer& );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
104 Data_Writer& operator = ( const Data_Writer& );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
105 public:
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
106 Data_Writer() { }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
107 virtual ~Data_Writer() { }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
108
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
109 typedef const char* error_t;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
110
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
111 // Write 'n' bytes. NULL on success, otherwise error string.
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
112 virtual error_t write( const void*, long n ) = 0;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
113 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
114
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
115 class Null_Writer : public Data_Writer {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
116 public:
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
117 error_t write( const void*, long );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
118 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
119
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
120 class Std_File_Writer : public Data_Writer {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
121 FILE* file;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
122 public:
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
123 Std_File_Writer();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
124 ~Std_File_Writer();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
125
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
126 error_t open( const char* );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
127
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
128 // Forward writes to file. Caller must close file later.
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
129 //void forward( FILE* );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
130
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
131 error_t write( const void*, long );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
132
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
133 void close();
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
134 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
135
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
136 // to do: mem file writer
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
137
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
138 // Write to block of memory
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
139 class Mem_Writer : public Data_Writer {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
140 void* out;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
141 long remain_;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
142 int ignore_excess;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
143 public:
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
144 // to do: automatic allocation and expansion of memory?
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
145 Mem_Writer( void*, long size, int ignore_excess = 1 );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
146 error_t write( const void*, long );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
147 long remain() const;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
148 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
149
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
150 #endif
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
151