dynamic keyframes, textbox rework, andrea ffmpeg.opts, perpetual chkpt undo, lv2...
[goodguy/history.git] / cinelerra-5.1 / cinelerra / filexml.h
index 44da4374c15325416e8ae1200c673469e9212ee5..70950384a5bda391a42dc20f0ad1c25c64d3c4b3 100644 (file)
@@ -27,6 +27,7 @@
 #include <limits.h>
 
 #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,10 +132,11 @@ public:
        int append_data(const char *text);
        int append_data(const char *text, long len);
 
-       charread_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);
        int write_to_file(FILE *file, const char *filename="");
        int read_from_file(const char *filename, int ignore_error = 0);
@@ -144,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;