X-Git-Url: http://git.cinelerra-gg.org/git/?p=goodguy%2Fhistory.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Ffilexml.h;h=70950384a5bda391a42dc20f0ad1c25c64d3c4b3;hp=270b763df7b29bf8e7533545c954cc8552ec42cd;hb=HEAD;hpb=0983c78067d86d25426fd34655ad9a9992ef04c7 diff --git a/cinelerra-5.1/cinelerra/filexml.h b/cinelerra-5.1/cinelerra/filexml.h index 270b763d..70950384 100644 --- a/cinelerra-5.1/cinelerra/filexml.h +++ b/cinelerra-5.1/cinelerra/filexml.h @@ -27,6 +27,7 @@ #include #include "arraylist.h" +#include "keyframe.inc" #include "filexml.inc" #include "sizes.h" @@ -38,10 +39,11 @@ class XMLBuffer 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, const char *buf, int del=0); // writing + XMLBuffer(long buf_size, char *buf, int del=0); // writing XMLBuffer(const char *buf, long buf_size, int del=0); // reading ~XMLBuffer(); @@ -49,17 +51,15 @@ public: 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); @@ -132,9 +132,9 @@ public: 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 read_text_until(const char *tag_end, char *out, int len); + 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); @@ -145,17 +145,18 @@ public: 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;