summaryrefslogtreecommitdiffstats
path: root/playtree.h
diff options
context:
space:
mode:
authorarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-01-08 01:24:25 +0000
committerarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-01-08 01:24:25 +0000
commit10d82182e0840b71675d0d7ebc742081446568f7 (patch)
treed9c982474a16fb0476b7dd2e34bc60d28ebcc52b /playtree.h
parent82b1541bc04d8336e9786af3e9a7349a6e25ca68 (diff)
downloadmpv-10d82182e0840b71675d0d7ebc742081446568f7.tar.bz2
mpv-10d82182e0840b71675d0d7ebc742081446568f7.tar.xz
tree-based playlist parser code by Alban Bedel <albeu@free.fr>
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@4044 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'playtree.h')
-rw-r--r--playtree.h144
1 files changed, 144 insertions, 0 deletions
diff --git a/playtree.h b/playtree.h
new file mode 100644
index 0000000000..ef293ec2b7
--- /dev/null
+++ b/playtree.h
@@ -0,0 +1,144 @@
+
+#include "libmpdemux/stream.h"
+
+#define PLAY_TREE_ITER_ERROR 0
+#define PLAY_TREE_ITER_ENTRY 1
+#define PLAY_TREE_ITER_NODE 2
+#define PLAY_TREE_ITER_END 3
+
+typedef struct play_tree play_tree_t;
+typedef struct play_tree_iter play_tree_iter_t;
+
+#if 0
+typedef struct play_tree_info play_tree_info_t;
+typedef struct play_tree_param play_tree_param_t;
+
+// TODO : a attrib,val pair system and not something hardcoded
+struct play_tree_info {
+ char* title;
+ char* author;
+ char* copyright;
+ char* abstract;
+ // Some more ??
+}
+
+struct play_tree_param {
+ char* name;
+ char* value;
+}
+#endif
+
+struct play_tree {
+ play_tree_t* parent;
+ play_tree_t* child;
+ play_tree_t* next;
+ play_tree_t* prev;
+
+ //play_tree_info_t info;
+ //int n_param;
+ //play_tree_param_t* params;
+ int loop;
+ char** files;
+};
+
+struct play_tree_iter {
+ play_tree_t* root; // Iter root tree
+ play_tree_t* tree; // Current tree
+ // struct m_config* config;
+ int loop; // Looping status
+ int file;
+ int num_files;
+
+ int* status_stack; // loop/valid stack to save/revert status when we go up/down
+ int stack_size; // status stack size
+};
+
+play_tree_t*
+play_tree_new(void);
+
+// If childs is true free also the childs
+void
+play_tree_free(play_tree_t* pt, int childs);
+
+
+void
+play_tree_free_list(play_tree_t* pt, int childs);
+
+
+// Childs
+void
+play_tree_set_child(play_tree_t* pt, play_tree_t* child);
+// Or parent
+void
+play_tree_set_parent(play_tree_t* pt, play_tree_t* parent);
+
+
+// Add at end
+void
+play_tree_append_entry(play_tree_t* pt, play_tree_t* entry);
+
+// And on begining
+void
+play_tree_prepend_entry(play_tree_t* pt, play_tree_t* entry);
+
+// Insert after
+void
+play_tree_insert_entry(play_tree_t* pt, play_tree_t* entry);
+
+// Detach from the tree
+void
+play_tree_remove(play_tree_t* pt, int free_it,int with_childs);
+
+
+void
+play_tree_add_file(play_tree_t* pt,char* file);
+
+int
+play_tree_remove_file(play_tree_t* pt,char* file);
+
+
+#if 0
+// Val can be NULL
+void
+play_tree_set_param(play_tree_t* pt, char* name, char* val);
+
+int
+play_tree_unset_param(play_tree_t* pt, char* name);
+
+#endif
+
+
+/// Iterator
+
+play_tree_iter_t*
+play_tree_iter_new(play_tree_t* pt);
+
+play_tree_iter_t*
+play_tree_iter_new_copy(play_tree_iter_t* old);
+
+void
+play_tree_iter_free(play_tree_iter_t* iter);
+
+// d is the direction : d > 0 == next , d < 0 == prev
+// with_node : TRUE == stop on nodes with childs, FALSE == go directly to the next child
+
+int
+play_tree_iter_step(play_tree_iter_t* iter, int d,int with_nodes);
+
+int // Break a loop, etc
+play_tree_iter_up_step(play_tree_iter_t* iter, int d,int with_nodes);
+
+int // Enter a node child list
+play_tree_iter_down_step(play_tree_iter_t* iter, int d,int with_nodes);
+
+char*
+play_tree_iter_get_file(play_tree_iter_t* iter, int d);
+
+play_tree_t*
+parse_playtree(stream_t *stream);
+
+play_tree_t*
+play_tree_cleanup(play_tree_t* pt);
+
+play_tree_t*
+parse_playlist_file(char* file);