tomwalters@0
|
1 /*
|
tomwalters@0
|
2 source.h
|
tomwalters@0
|
3 ========
|
tomwalters@0
|
4
|
tomwalters@0
|
5
|
tomwalters@0
|
6
|
tomwalters@0
|
7 */
|
tomwalters@0
|
8
|
tomwalters@0
|
9 #ifndef _SOURCE_H_
|
tomwalters@0
|
10 #define _SOURCE_H_
|
tomwalters@0
|
11
|
tomwalters@0
|
12 #include "buffer.h"
|
tomwalters@0
|
13
|
tomwalters@0
|
14 /* standard entry points */
|
tomwalters@0
|
15
|
tomwalters@0
|
16 #define PullSome( _source, _bytes ) ( _SPTR( _source )->returned = _SPTR( _source )->pull( _SPTR( _source ), (ByteCount *) ( _bytes ) ) )
|
tomwalters@0
|
17 #define FillSome( _source, _bytes, _buffer ) ( _SPTR( _source )->returned = _SPTR( _source )->fill( _SPTR( _source ), (ByteCount *) ( _bytes ), (Pointer ) ( _buffer ) ) )
|
tomwalters@0
|
18 #define RollSome( _source, _bytes, _kept ) ( _SPTR( _source )->returned = _SPTR( _source )->roll( _SPTR( _source ), (ByteCount *) ( _bytes ), (ByteCount) ( _kept ) ) )
|
tomwalters@0
|
19
|
tomwalters@0
|
20 /* for compatability */
|
tomwalters@0
|
21
|
tomwalters@0
|
22 #define Pull( _source, _bytes ) ( _SPTR( _source )->returned = oldPull( _SPTR( _source ), (ByteCount ) ( _bytes ) ) )
|
tomwalters@0
|
23 #define Fill( _source, _bytes, _buffer ) ( _SPTR( _source )->returned = oldFill( _SPTR( _source ), (ByteCount ) ( _bytes ), (Pointer ) ( _buffer ) ) )
|
tomwalters@0
|
24 #define Roll( _source, _bytes, _kept ) ( _SPTR( _source )->returned = oldRoll( _SPTR( _source ), (ByteCount ) ( _bytes ), (ByteCount) ( _kept ) ) )
|
tomwalters@0
|
25
|
tomwalters@0
|
26 /* for more compatability */
|
tomwalters@0
|
27
|
tomwalters@0
|
28 #define Shift( _source, _bytes, _kept ) Roll( _source, _bytes, _kept )
|
tomwalters@0
|
29
|
tomwalters@0
|
30 /* count conversions */
|
tomwalters@0
|
31
|
tomwalters@0
|
32 #define ToPoints( _type, _bytes ) ( ( _bytes ) >> ( sizeof(_type) >> 1 ) )
|
tomwalters@0
|
33 #define ToBytes( _type, _points ) ( ( char *) ( (_type *) 0l + ( _points ) ) - ( char *) 0l )
|
tomwalters@0
|
34
|
tomwalters@0
|
35 /* for convenience */
|
tomwalters@0
|
36
|
tomwalters@0
|
37 #define PullItems( _source, _number, _type ) ( (_type *) Pull( _source, ToBytes( _type, _number ) ) )
|
tomwalters@0
|
38
|
tomwalters@0
|
39 #define PullChars( _source, _number ) PullItems( _source, _number, char )
|
tomwalters@0
|
40 #define PullShorts( _source, _number ) PullItems( _source, _number, short )
|
tomwalters@0
|
41 #define PullInts( _source, _number ) PullItems( _source, _number, int )
|
tomwalters@0
|
42 #define PullDoubles( _source, _number ) PullItems( _source, _number, double )
|
tomwalters@0
|
43
|
tomwalters@0
|
44
|
tomwalters@0
|
45 #define FillItems( _source, _number, _buffer, _type ) ( (_type *) Fill( _source, ToBytes( _type, _number ), (Pointer) ( _buffer ) ) )
|
tomwalters@0
|
46
|
tomwalters@0
|
47 #define FillChars( _source, _number, _buffer ) FillItems( _source, _number, _buffer, char )
|
tomwalters@0
|
48 #define FillShorts( _source, _number, _buffer ) FillItems( _source, _number, _buffer, short )
|
tomwalters@0
|
49 #define FillInts( _source, _number, _buffer ) FillItems( _source, _number, _buffer, int )
|
tomwalters@0
|
50 #define FillDoubles( _source, _number, _buffer ) FillItems( _source, _number, _buffer, double )
|
tomwalters@0
|
51
|
tomwalters@0
|
52
|
tomwalters@0
|
53 #define RollItems( _source, _number, _keep, _type ) ( (_type *) Roll( _source, ToBytes( _type, _number ), ( _keep ) * sizeof ( _type ) ) )
|
tomwalters@0
|
54
|
tomwalters@0
|
55 #define RollChars( _source, _number, _keep ) RollItems( _source, _number, _keep, char )
|
tomwalters@0
|
56 #define RollShorts( _source, _number, _keep ) RollItems( _source, _number, _keep, short )
|
tomwalters@0
|
57 #define RollInts( _source, _number, _keep ) RollItems( _source, _number, _keep, int )
|
tomwalters@0
|
58 #define RollDoubles( _source, _number, _keep ) RollItems( _source, _number, _keep, double )
|
tomwalters@0
|
59
|
tomwalters@0
|
60 /* operators on sources */
|
tomwalters@0
|
61
|
tomwalters@0
|
62 #define SetSource( _src, _puller, _filler, _roller, _name ) setSource( (struct _source *) _src, _puller, _filler, _roller, _name )
|
tomwalters@0
|
63 #define TypeSource( _src, _type ) typeSource( (struct _source *) _src, _type )
|
tomwalters@0
|
64 #define SourceType( _src ) sourceType( (struct _source *) _src )
|
tomwalters@0
|
65 #define SourceName( _src ) sourceName( (struct _source *) _src )
|
tomwalters@0
|
66 #define DeleteSource( _src ) deleteSource( (struct _source *) _src )
|
tomwalters@0
|
67
|
tomwalters@0
|
68 #if 00
|
tomwalters@0
|
69 #define NameOfClass BasicSourceClass
|
tomwalters@0
|
70
|
tomwalters@0
|
71 #define SetSource( _source, _puller, _filler, _roller, _name ) NameOfClass.set( (struct _source *) _source, _puller, _filler, _roller, _name )
|
tomwalters@0
|
72 #define TypeSource( _source, _type ) NameOfClass.setType( (struct _source *) _source, _type )
|
tomwalters@0
|
73 #define SourceType( _source ) NameOfClass.getType( (struct _source *) _source )
|
tomwalters@0
|
74 #define SourceName( _source ) NameOfClass.getName( (struct _source *) _source )
|
tomwalters@0
|
75 #define DeleteSource( _source ) NameOfClass.delete( (struct _source *) _source )
|
tomwalters@0
|
76 #endif
|
tomwalters@0
|
77
|
tomwalters@0
|
78
|
tomwalters@0
|
79
|
tomwalters@0
|
80 #define SinkSource( _source, _framebytes , _frames ) \
|
tomwalters@0
|
81 sinkSource( _source, (ByteCount) ( _framebytes ), (long) _frames )
|
tomwalters@0
|
82
|
tomwalters@0
|
83 #define SinkAndCloseSource( _source, _framebytes , _frames ) \
|
tomwalters@0
|
84 sinkAndCloseSource( _source, (ByteCount) ( _framebytes ), (long) _frames )
|
tomwalters@0
|
85
|
tomwalters@0
|
86 /* moving towards buffer abstraction, slowly */
|
tomwalters@0
|
87
|
tomwalters@0
|
88 #define SourceBuffer( _source ) ( ( _source )->buffer )
|
tomwalters@0
|
89 #define SetSourceBuffer( _source, _buffer ) ( ( _source )->buffer = _buffer )
|
tomwalters@0
|
90
|
tomwalters@0
|
91 /* only pure source */
|
tomwalters@0
|
92
|
tomwalters@0
|
93 #define NewTappingSource( _source , _state, _callback, _close, _name ) \
|
tomwalters@0
|
94 newTappingSource( (Pointer) ( _source ), _state, _callback, _close, _name )
|
tomwalters@0
|
95
|
tomwalters@0
|
96 #define NewRollableSource( _source ) \
|
tomwalters@0
|
97 newRollableSource( _source )
|
tomwalters@0
|
98
|
tomwalters@0
|
99 #if 0
|
tomwalters@0
|
100 /* for compatability */
|
tomwalters@0
|
101
|
tomwalters@0
|
102 #define NewShiftableSource( _source ) \
|
tomwalters@0
|
103 NewRollableSource( _source )
|
tomwalters@0
|
104 #endif
|
tomwalters@0
|
105
|
tomwalters@0
|
106 /* for binding with C++ perhaps someday */
|
tomwalters@0
|
107
|
tomwalters@0
|
108 #if defined(__cplusplus) || defined(c_plusplus)
|
tomwalters@0
|
109 #define CPLPL 1
|
tomwalters@0
|
110 #else
|
tomwalters@0
|
111 #define CPLPL 0
|
tomwalters@0
|
112 #endif
|
tomwalters@0
|
113
|
tomwalters@0
|
114 #if CPLPL
|
tomwalters@0
|
115
|
tomwalters@0
|
116 #define _SPTR( _s ) ((_s).ptr)
|
tomwalters@0
|
117 #define _MANY_ARGS ...
|
tomwalters@0
|
118 #define _ONE_SOURCE Source source
|
tomwalters@0
|
119 #define _TWO_SOURCES Source source1, Source source2
|
tomwalters@0
|
120 #define _ONE_SOURCE_PLUS Source source...
|
tomwalters@0
|
121
|
tomwalters@0
|
122 typedef class _source &Source ; /* ?? or something */
|
tomwalters@0
|
123
|
tomwalters@0
|
124 #else
|
tomwalters@0
|
125
|
tomwalters@0
|
126 #define _SPTR( _s ) _s
|
tomwalters@0
|
127 #define _MANY_ARGS /* ... */
|
tomwalters@0
|
128 #define _ONE_SOURCE /* Source source */
|
tomwalters@0
|
129 #define _TWO_SOURCES /* Source source1, Source source2 */
|
tomwalters@0
|
130 #define _ONE_SOURCE_PLUS /* Source source... */
|
tomwalters@0
|
131
|
tomwalters@0
|
132 /* basic types */
|
tomwalters@0
|
133
|
tomwalters@0
|
134 typedef struct _source *Source, *SourceArray[1] ;
|
tomwalters@0
|
135
|
tomwalters@0
|
136 #endif
|
tomwalters@0
|
137
|
tomwalters@0
|
138 typedef Source CharSource, ShortSource, IntSource, FloatSource, DoubleSource, ComplexSource ;
|
tomwalters@0
|
139 typedef SourceArray CharSourceArray, ShortSourceArray, IntSourceArray, FloatSourceArray, DoubleSourceArray, ComplexSourceArray ;
|
tomwalters@0
|
140
|
tomwalters@0
|
141 typedef int ByteCount ;
|
tomwalters@0
|
142
|
tomwalters@0
|
143 /* dependant on type of source */
|
tomwalters@0
|
144
|
tomwalters@0
|
145 struct _source { Pointer (*pull)(), (*fill)(), (*roll)(), returned ; char *name, *type ; int opened ; Source (*open)() ; } ;
|
tomwalters@0
|
146 struct _source_operators { Source (*set)() ; Pointer (*delete)() ; Source (*setType)() ; char *(*getType)() ; char *(*getName)() ; } ;
|
tomwalters@0
|
147
|
tomwalters@0
|
148 struct _pullable_source { struct _source parent ; } ;
|
tomwalters@0
|
149 struct _fillable_source { struct _source parent ; Buffer buffer ; } ;
|
tomwalters@0
|
150
|
tomwalters@0
|
151 #if 00
|
tomwalters@0
|
152 extern struct _source_operators NameOfClass ;
|
tomwalters@0
|
153 extern struct _source *call_conversions ;
|
tomwalters@0
|
154 #endif
|
tomwalters@0
|
155
|
tomwalters@0
|
156 extern Source setSource() ;
|
tomwalters@0
|
157 extern Source typeSource() ;
|
tomwalters@0
|
158 extern char *sourceType() ;
|
tomwalters@0
|
159 extern char *sourceName() ;
|
tomwalters@0
|
160 extern Pointer deleteSource() ;
|
tomwalters@0
|
161
|
tomwalters@0
|
162 extern Pointer oldPull(), oldFill(), oldRoll() ;
|
tomwalters@0
|
163
|
tomwalters@0
|
164
|
tomwalters@0
|
165 extern void sinkSource() ;
|
tomwalters@0
|
166 extern void CloseSource() ;
|
tomwalters@0
|
167 extern void sinkAndCloseSource() ;
|
tomwalters@0
|
168
|
tomwalters@0
|
169 /* derived source types for different purposes */
|
tomwalters@0
|
170
|
tomwalters@0
|
171 extern Source newTappingSource() ;
|
tomwalters@0
|
172 extern Source newRollableSource() ;
|
tomwalters@0
|
173
|
tomwalters@0
|
174 extern Pointer nonRoller() ;
|
tomwalters@0
|
175
|
tomwalters@0
|
176 #include "pullable.h"
|
tomwalters@0
|
177
|
tomwalters@0
|
178 #include "fillable.h"
|
tomwalters@0
|
179
|
tomwalters@0
|
180 extern Source *BindSources() ;
|
tomwalters@0
|
181
|
tomwalters@0
|
182 /* for compatability... for now */
|
tomwalters@0
|
183
|
tomwalters@0
|
184 extern Source stdStaticSource() ;
|
tomwalters@0
|
185 extern Source stdSlaveSource() ;
|
tomwalters@0
|
186 extern Source stdAutoSource() ;
|
tomwalters@0
|
187 extern Source stdSelfSource() ;
|
tomwalters@0
|
188
|
tomwalters@0
|
189 #endif
|
tomwalters@0
|
190
|
tomwalters@0
|
191 extern Source EmptySource ;
|