Merge CV, ver=5.1; ops/methods from HV, and interface from CV where possible
[goodguy/history.git] / cinelerra-5.1 / db / s.h
diff --git a/cinelerra-5.1/db/s.h b/cinelerra-5.1/db/s.h
new file mode 100644 (file)
index 0000000..9b8cd35
--- /dev/null
@@ -0,0 +1,301 @@
+#ifndef _S_H_
+#define _S_H_
+#include <cstdio>
+#include <stdlib.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+
+#include "tdb.h"
+
+
+// Video_frame
+DbObj(Video_frame)
+  basic_def(double,Frame_mean);
+  basic_def(double,Frame_std_dev);
+  basic_def(double,Frame_cx);
+  basic_def(double,Frame_cy);
+  basic_def(double,Frame_moment);
+  varray_def(unsigned char,Frame_data);
+};
+
+DbLoc(Video_frame)
+  basic_ref(double,Frame_mean);
+  basic_ref(double,Frame_std_dev);
+  basic_ref(double,Frame_cx);
+  basic_ref(double,Frame_cy);
+  basic_ref(double,Frame_moment);
+  varray_ref(unsigned char,Frame_data);
+
+  class ikey_Frame_weight : public Db::iKey { public:
+    Video_frameObj::t_Frame_mean v_Frame_mean;
+    int v_id;
+    static int cmpr(char *a, char *b);
+    ikey_Frame_weight(ObjectLoc &loc,
+        double Frame_mean, int id=-1)
+    : iKey("Frame_weight",loc,cmpr),
+      v_Frame_mean(Frame_mean),
+      v_id(id) {}
+  };
+  class rkey_Frame_weight : public Db::rKey { public:
+    static int cmpr(char *a, char *b);
+    rkey_Frame_weight(ObjectLoc &loc) : rKey("Frame_weight",loc,cmpr) {}
+  };
+
+  class ikey_Frame_center : public Db::iKey { public:
+    Video_frameObj::t_Frame_moment v_Frame_moment;
+    int v_id;
+    static int cmpr(char *a, char *b);
+    ikey_Frame_center(ObjectLoc &loc,
+        double Frame_moment, int id=-1)
+    : iKey("Frame_center",loc,cmpr),
+      v_Frame_moment(Frame_moment),
+      v_id(id) {}
+  };
+  class rkey_Frame_center : public Db::rKey { public:
+    static int cmpr(char *a, char *b);
+    rkey_Frame_center(ObjectLoc &loc) : rKey("Frame_center",loc,cmpr) {}
+  };
+
+  int Allocate();
+  int Construct();
+  int Destruct();
+  void Deallocate();
+};
+// Timeline
+DbObj(Timeline)
+  basic_def(unsigned int,Clip_id);
+  basic_def(unsigned int,Sequence_no);
+  basic_def(unsigned int,Frame_id);
+  basic_def(unsigned int,Group);
+  basic_def(double,Time_offset);
+};
+
+DbLoc(Timeline)
+  basic_ref(unsigned int,Clip_id);
+  basic_ref(unsigned int,Sequence_no);
+  basic_ref(unsigned int,Frame_id);
+  basic_ref(unsigned int,Group);
+  basic_ref(double,Time_offset);
+
+  class ikey_Timelines : public Db::iKey { public:
+    TimelineObj::t_Frame_id v_Frame_id;
+    int v_id;
+    static int cmpr(char *a, char *b);
+    ikey_Timelines(ObjectLoc &loc,
+        unsigned int Frame_id, int id=-1)
+    : iKey("Timelines",loc,cmpr),
+      v_Frame_id(Frame_id),
+      v_id(id) {}
+  };
+  class rkey_Timelines : public Db::rKey { public:
+    static int cmpr(char *a, char *b);
+    rkey_Timelines(ObjectLoc &loc) : rKey("Timelines",loc,cmpr) {}
+  };
+
+  class ikey_Sequences : public Db::iKey { public:
+    TimelineObj::t_Clip_id v_Clip_id;
+    TimelineObj::t_Sequence_no v_Sequence_no;
+    static int cmpr(char *a, char *b);
+    ikey_Sequences(ObjectLoc &loc,
+        unsigned int Clip_id,
+        unsigned int Sequence_no)
+    : iKey("Sequences",loc,cmpr),
+      v_Clip_id(Clip_id),
+      v_Sequence_no(Sequence_no) {}
+  };
+  class rkey_Sequences : public Db::rKey { public:
+    static int cmpr(char *a, char *b);
+    rkey_Sequences(ObjectLoc &loc) : rKey("Sequences",loc,cmpr) {}
+  };
+
+  int Allocate();
+  int Construct();
+  int Destruct();
+  void Deallocate();
+};
+// Clip_set
+DbObj(Clip_set)
+  sarray_def(char,Title);
+  sarray_def(char,Asset_path);
+  basic_def(double,Position);
+  basic_def(double,Framerate);
+  basic_def(double,Average_weight);
+  basic_def(unsigned int,Frames);
+  basic_def(unsigned int,Prefix_size);
+  basic_def(unsigned int,Suffix_size);
+  varray_def(unsigned char,Weights);
+  basic_def(long,System_time);
+  basic_def(long,Creation_time);
+};
+
+DbLoc(Clip_set)
+  sarray_ref(char,Title);
+  sarray_ref(char,Asset_path);
+  basic_ref(double,Position);
+  basic_ref(double,Framerate);
+  basic_ref(double,Average_weight);
+  basic_ref(unsigned int,Frames);
+  basic_ref(unsigned int,Prefix_size);
+  basic_ref(unsigned int,Suffix_size);
+  varray_ref(unsigned char,Weights);
+  basic_ref(long,System_time);
+  basic_ref(long,Creation_time);
+
+  class ikey_Clip_title : public Db::iKey { public:
+    Clip_setObj::t_Title v_Title;
+    int v_id;
+    static int cmpr(char *a, char *b);
+    ikey_Clip_title(ObjectLoc &loc,
+        const Clip_setObj::t_Title &Title, int id=-1)
+    : iKey("Clip_title",loc,cmpr),
+      v_Title(Title),
+      v_id(id) {}
+  };
+  class rkey_Clip_title : public Db::rKey { public:
+    static int cmpr(char *a, char *b);
+    rkey_Clip_title(ObjectLoc &loc) : rKey("Clip_title",loc,cmpr) {}
+  };
+
+  class ikey_Clip_system_time : public Db::iKey { public:
+    Clip_setObj::t_System_time v_System_time;
+    int v_id;
+    static int cmpr(char *a, char *b);
+    ikey_Clip_system_time(ObjectLoc &loc,
+        long System_time, int id=-1)
+    : iKey("Clip_system_time",loc,cmpr),
+      v_System_time(System_time),
+      v_id(id) {}
+  };
+  class rkey_Clip_system_time : public Db::rKey { public:
+    static int cmpr(char *a, char *b);
+    rkey_Clip_system_time(ObjectLoc &loc) : rKey("Clip_system_time",loc,cmpr) {}
+  };
+
+  class ikey_Clip_creation_time : public Db::iKey { public:
+    Clip_setObj::t_Creation_time v_Creation_time;
+    int v_id;
+    static int cmpr(char *a, char *b);
+    ikey_Clip_creation_time(ObjectLoc &loc,
+        long Creation_time, int id=-1)
+    : iKey("Clip_creation_time",loc,cmpr),
+      v_Creation_time(Creation_time),
+      v_id(id) {}
+  };
+  class rkey_Clip_creation_time : public Db::rKey { public:
+    static int cmpr(char *a, char *b);
+    rkey_Clip_creation_time(ObjectLoc &loc) : rKey("Clip_creation_time",loc,cmpr) {}
+  };
+
+  class ikey_Clip_path_pos : public Db::iKey { public:
+    Clip_setObj::t_Asset_path v_Asset_path;
+    Clip_setObj::t_Position v_Position;
+    int v_id;
+    static int cmpr(char *a, char *b);
+    ikey_Clip_path_pos(ObjectLoc &loc,
+        const Clip_setObj::t_Asset_path &Asset_path,
+        double Position, int id=-1)
+    : iKey("Clip_path_pos",loc,cmpr),
+      v_Asset_path(Asset_path),
+      v_Position(Position),
+      v_id(id) {}
+  };
+  class rkey_Clip_path_pos : public Db::rKey { public:
+    static int cmpr(char *a, char *b);
+    rkey_Clip_path_pos(ObjectLoc &loc) : rKey("Clip_path_pos",loc,cmpr) {}
+  };
+
+  int Allocate();
+  int Construct();
+  int Destruct();
+  void Deallocate();
+};
+// Clip_views
+DbObj(Clip_views)
+  basic_def(unsigned int,Access_clip_id);
+  basic_def(long,Access_time);
+  basic_def(unsigned int,Access_count);
+};
+
+DbLoc(Clip_views)
+  basic_ref(unsigned int,Access_clip_id);
+  basic_ref(long,Access_time);
+  basic_ref(unsigned int,Access_count);
+
+  class ikey_Clip_access : public Db::iKey { public:
+    Clip_viewsObj::t_Access_clip_id v_Access_clip_id;
+    static int cmpr(char *a, char *b);
+    ikey_Clip_access(ObjectLoc &loc,
+        unsigned int Access_clip_id)
+    : iKey("Clip_access",loc,cmpr),
+      v_Access_clip_id(Access_clip_id) {}
+  };
+  class rkey_Clip_access : public Db::rKey { public:
+    static int cmpr(char *a, char *b);
+    rkey_Clip_access(ObjectLoc &loc) : rKey("Clip_access",loc,cmpr) {}
+  };
+
+  class ikey_Last_view : public Db::iKey { public:
+    Clip_viewsObj::t_Access_time v_Access_time;
+    int v_id;
+    static int cmpr(char *a, char *b);
+    ikey_Last_view(ObjectLoc &loc,
+        long Access_time, int id=-1)
+    : iKey("Last_view",loc,cmpr),
+      v_Access_time(Access_time),
+      v_id(id) {}
+  };
+  class rkey_Last_view : public Db::rKey { public:
+    static int cmpr(char *a, char *b);
+    rkey_Last_view(ObjectLoc &loc) : rKey("Last_view",loc,cmpr) {}
+  };
+
+  class ikey_Total_views : public Db::iKey { public:
+    Clip_viewsObj::t_Access_count v_Access_count;
+    Clip_viewsObj::t_Access_clip_id v_Access_clip_id;
+    int v_id;
+    static int cmpr(char *a, char *b);
+    ikey_Total_views(ObjectLoc &loc,
+        unsigned int Access_count,
+        unsigned int Access_clip_id, int id=-1)
+    : iKey("Total_views",loc,cmpr),
+      v_Access_count(Access_count),
+      v_Access_clip_id(Access_clip_id),
+      v_id(id) {}
+  };
+  class rkey_Total_views : public Db::rKey { public:
+    static int cmpr(char *a, char *b);
+    rkey_Total_views(ObjectLoc &loc) : rKey("Total_views",loc,cmpr) {}
+  };
+
+  int Allocate();
+  int Construct();
+  int Destruct();
+  void Deallocate();
+};
+
+
+class theDb : public Db {
+  int dfd, dkey, no_atime;
+  int db_create();
+  int db_open();
+  int db_access();
+public:
+  Objects objects;
+  Entity Video_frame;  Video_frameLoc video_frame;
+  Entity Timeline;  TimelineLoc timeline;
+  Entity Clip_set;  Clip_setLoc clip_set;
+  Entity Clip_views;  Clip_viewsLoc clip_views;
+
+  int create(const char *dfn);
+  int open(const char *dfn, int key=-1);
+  int access(const char *dfn, int key=-1, int rw=0);
+  void close();
+  int attach(int rw=0) { return Db::attach(rw); }
+  int detach() { return Db::detach(); }
+
+  theDb();
+  ~theDb() { finit(objects); }
+};
+
+#endif