#include <limits.h>
#include "arraylist.h"
+#include "keyframe.inc"
#include "filexml.inc"
#include "sizes.h"
unsigned char *inp, *outp, *bfr, *lmt;
int destroy;
- unsigned char *&demand(long len);
+ int demand(long len);
+ friend class KeyFrame;
public:
XMLBuffer(long buf_size=0x1000, long max_size=LONG_MAX, int del=1);
XMLBuffer(long buf_size, char *buf, int del=0); // writing
long itell() { return outp - bfr; }
void oseek(long pos) { inp = bfr + pos; }
void iseek(long pos) { outp = bfr + pos; }
- unsigned char *pos(long ofs=0) { return bfr+ofs; }
- unsigned char *str() { if( inp < lmt ) *inp = 0; return bfr; }
+ unsigned char *pos(long ofs=0) { return bfr+ofs; }
+ char *cstr() { if( demand(otell()+1) ) *inp = 0; return (char*)bfr; }
int read(char *bp, int n);
int write(const char *bp, int n);
+ void copy_from(XMLBuffer *xbfr);
int cur() { return outp>=inp ? -1 : *outp; }
int next() { return outp>=inp ? -1 : *outp++; }
- int next(int ch) {
- demand(otell()+1);
- return *inp++ = ch;
- }
+ int next(int ch) { return !demand(otell()+1) ? -1 : *inp++ = ch; }
static char *decode_data(char *bp, const char *sp, int n=-1);
static char *encode_data(char *bp, const char *sp, int n=-1);
int append_data(const char *text);
int append_data(const char *text, long len);
- char* read_text();
- int read_data_until(const char *tag_end, char *out, int len, int skip=0);
- int read_text_until(const char *tag_end, char *out, int len, int skip=0);
+ char *read_text();
+ int read_data_until(const char *tag_end, XMLBuffer *xbfr, int skip=0);
+ int read_text_until(const char *tag_end, XMLBuffer *xbfr, int skip=0);
int read_tag();
int skip_tag();
int write_to_file(const char *filename);
char *(*encode)(char *bp, const char *sp, int n);
long (*coded_length)(const char *sp, int n);
- int set_shared_input(char *shared_string, long avail, int coded=1);
- int set_shared_output(char *shared_string, long avail, int coded=1);
void set_coding(int coding);
int get_coding();
+ int set_shared_input(XMLBuffer *xbfr);
+ int set_shared_output(XMLBuffer *xbfr);
+
int rewind();
char *get_data();
char *string();
long length();
XMLBuffer *buffer;
- int coded;
+ int coded, shared;
XMLTag tag;
long output_length;