Pajdeg  0.2.2
Pajdeg
PDTwinStream.h
Go to the documentation of this file.
1 //
2 // PDTwinStream.h
3 //
4 // Copyright (c) 2012 - 2015 Karl-Johan Alm (http://github.com/kallewoof)
5 //
6 // Permission is hereby granted, free of charge, to any person obtaining a copy
7 // of this software and associated documentation files (the "Software"), to deal
8 // in the Software without restriction, including without limitation the rights
9 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 // copies of the Software, and to permit persons to whom the Software is
11 // furnished to do so, subject to the following conditions:
12 //
13 // The above copyright notice and this permission notice shall be included in
14 // all copies or substantial portions of the Software.
15 //
16 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 // THE SOFTWARE.
23 //
48 #ifndef INCLUDED_PDTwinStream_h
49 #define INCLUDED_PDTwinStream_h
50 
51 #include <stdio.h>
52 #include "PDDefines.h"
53 
55 
62 extern PDTwinStreamRef PDTwinStreamCreate(FILE *fi, FILE *fo);
63 
65 
75 
84 
94 
100 #define PDTwinStreamGetInputOffset(str) (str->offsi + str->cursor)
101 
107 #define PDTwinStreamGetOutputOffset(str) (str->offso)
108 
110 
127 extern void PDTwinStreamGrowInputBuffer(void *ts, PDScannerRef scanner, char **buf, PDInteger *size, PDInteger req);
128 
140 extern void PDTwinStreamGrowInputBufferReversed(void *ts, PDScannerRef scanner, char **buf, PDInteger *size, PDInteger req);
141 
151 extern void PDTwinStreamDisallowGrowth(void *ts, PDScannerRef scanner, char **buf, PDInteger *size, PDInteger req);
152 
161 extern void PDTwinStreamSeek(PDTwinStreamRef ts, PDSize position);
162 
170 extern void PDTwinStreamAdvance(PDTwinStreamRef ts, PDSize bytes);
171 
185 extern PDSize PDTwinStreamFetchBranch(PDTwinStreamRef ts, PDSize position, PDInteger bytes, char **buf);
186 
193 extern void PDTwinStreamCutBranch(PDTwinStreamRef ts, char *buf);
194 
196 
197 // all commit operations are subject to heap realignment; any scanners except the master scanner (stream->scanner) must be discarded
198 // method must be ReadWrite; this is seldom checked; behavior is undefined if this is not the case, and the resulting PDF will most certainly not be OK
199 
206 
213 
221 extern void PDTwinStreamInsertContent(PDTwinStreamRef ts, PDSize bytes, const char *content);
222 
231 extern void PDTwinStreamPrune(PDTwinStreamRef ts, PDOffset mark);
232 
242 
244 
245 #ifdef PD_DEBUG_TWINSTREAM_ASSERT_OBJECTS
246 
254 extern void PDTwinStreamReassert(PDTwinStreamRef ts, PDOffset offset, char *expect, PDInteger len);
255 #endif
256 
257 #endif
258 
void PDTwinStreamAdvance(PDTwinStreamRef ts, PDSize bytes)
Definition: PDTwinStream.c:314
long PDInteger
Definition: PDDefines.h:184
PDScannerRef PDTwinStreamGetScanner(PDTwinStreamRef ts)
Definition: PDTwinStream.c:66
long long PDOffset
Definition: PDDefines.h:223
PDScannerRef PDTwinStreamSetupScannerWithState(PDTwinStreamRef ts, PDStateRef state)
Definition: PDTwinStream.c:71
void PDTWinStreamSetMethod(PDTwinStreamRef ts, PDTwinStreamMethod method)
Definition: PDTwinStream.c:79
void PDTwinStreamInsertContent(PDTwinStreamRef ts, PDSize bytes, const char *content)
Definition: PDTwinStream.c:541
void PDTwinStreamSeek(PDTwinStreamRef ts, PDSize position)
Definition: PDTwinStream.c:319
void PDTwinStreamDisallowGrowth(void *ts, PDScannerRef scanner, char **buf, PDInteger *size, PDInteger req)
Definition: PDTwinStream.c:309
void PDTwinStreamGrowInputBufferReversed(void *ts, PDScannerRef scanner, char **buf, PDInteger *size, PDInteger req)
Definition: PDTwinStream.c:233
void PDTwinStreamPrune(PDTwinStreamRef ts, PDOffset mark)
Definition: PDTwinStream.c:533
void PDTwinStreamDiscardContent(PDTwinStreamRef ts)
Definition: PDTwinStream.c:526
size_t PDSize
Definition: PDDefines.h:213
void PDTwinStreamCutBranch(PDTwinStreamRef ts, char *buf)
Definition: PDTwinStream.c:392
PDScannerRef PDTwinStreamCreateScanner(PDTwinStreamRef ts, PDStateRef state)
Definition: PDTwinStream.c:59
Definition: pd_internal.h:507
Definition: pd_internal.h:753
Definition: pd_internal.h:805
Definitions for the Pajdeg interface.
PDSize PDTwinStreamFetchBranch(PDTwinStreamRef ts, PDSize position, PDInteger bytes, char **buf)
Definition: PDTwinStream.c:334
void PDTWinStreamPassthroughContent(PDTwinStreamRef ts)
Definition: PDTwinStream.c:519
PDTwinStreamRef PDTwinStreamCreate(FILE *fi, FILE *fo)
Definition: PDTwinStream.c:46
void PDTwinStreamGrowInputBuffer(void *ts, PDScannerRef scanner, char **buf, PDInteger *size, PDInteger req)
Definition: PDTwinStream.c:142
PDTwinStreamMethod
Definition: PDDefines.h:812