reorganized everything
[faros-demo] / src / seq.cc
diff --git a/src/seq.cc b/src/seq.cc
new file mode 100644 (file)
index 0000000..29036a5
--- /dev/null
@@ -0,0 +1,103 @@
+#include <string.h>
+#include <vector>
+#include "seq.h"
+#include "track.h"
+
+struct SeqTrack {
+       char *name;
+       Track *track;
+};
+
+static std::vector<SeqTrack> tracks;
+
+bool init_seq()
+{
+       return true;
+}
+
+void destroy_seq()
+{
+       int ntrk = tracks.size();
+       for(int i=0; i<ntrk; i++) {
+               delete tracks[i].track;
+               delete [] tracks[i].name;
+       }
+       tracks.clear();
+}
+
+int add_seq_track(const char *name, InterpMode inmode, ExtrapMode exmode, float defval)
+{
+       int idx = find_seq_track(name);
+       if(idx >= 0) return idx;
+
+       SeqTrack st;
+       st.name = new char[strlen(name) + 1];
+       strcpy(st.name, name);
+       st.track = new Track;
+       st.track->defval = defval;
+       st.track->interp = inmode;
+       st.track->extrap = exmode;
+       tracks.push_back(st);
+       return tracks.size() - 1;
+}
+
+int find_seq_track(const char *name)
+{
+       int ntrk = tracks.size();
+       for(int i=0; i<ntrk; i++) {
+               if(strcmp(tracks[i].name, name) == 0) {
+                       return i;
+               }
+       }
+       return -1;
+}
+
+Track *get_seq_track(int idx)
+{
+       return tracks[idx].track;
+}
+
+void clear_seq_track(int idx)
+{
+       tracks[idx].track->clear();
+}
+
+void clear_seq_track(const char *name)
+{
+       int idx = find_seq_track(name);
+       if(idx >= 0) {
+               tracks[idx].track->clear();
+       }
+}
+
+void set_seq_value(int idx, long tm, float val)
+{
+       tracks[idx].track->set_key(tm, val);
+}
+
+void set_seq_value(const char *name, long tm, float val)
+{
+       int idx = find_seq_track(name);
+       if(idx >= 0) {
+               tracks[idx].track->set_key(tm, val);
+       }
+}
+
+float get_seq_value(int idx, long tm)
+{
+       return (*tracks[idx].track)(tm);
+}
+
+float get_seq_value(const char *name, long tm)
+{
+       int idx = find_seq_track(name);
+       if(idx < 0) {
+               return 0.0f;
+       }
+       return (*tracks[idx].track)(tm);
+}
+
+bool load_seq(const char *fname)
+{
+       return false;   /* TODO */
+}