00001
00002
00003
00004
00005
00006
00007
00008 #ifndef __WVISTREAMLIST_H
00009 #define __WVISTREAMLIST_H
00010
00011 #include "wvstream.h"
00012
00014 DeclareWvList2(WvIStreamListBase, IWvStream);
00015
00020 class WvIStreamList : public WvStream, public WvIStreamListBase
00021 {
00022 public:
00023 WvIStreamList();
00024 virtual ~WvIStreamList();
00025 virtual bool isok() const;
00026 virtual void pre_select(SelectInfo &si);
00027 virtual bool post_select(SelectInfo &si);
00028 virtual void execute();
00029
00030 void unlink(IWvStream *data)
00031 { sure_thing.unlink(data); WvIStreamListBase::unlink(data); }
00032
00033 void add_after(WvLink *after, IWvStream *data, bool autofree,
00034 const char *id)
00035 {
00036 WvIStreamListBase::add_after(after, data, autofree, id);
00037 }
00038 void add(IWvStream *data, bool autofree, const char *id)
00039 {
00040 WvIStreamListBase::add(data, autofree, id);
00041 }
00042 void prepend(IWvStream *data, bool autofree, const char *id)
00043 {
00044 WvIStreamListBase::prepend(data, autofree, id);
00045 }
00046
00047 public:
00048 bool auto_prune;
00049 static WvIStreamList globallist;
00050
00051 protected:
00052 WvIStreamListBase sure_thing;
00053
00054 private:
00055
00056
00057
00058 void add_after(WvLink *after, IWvStream *data, bool autofree, WvString id);
00059 void add(IWvStream *data, bool autofree, WvString id);
00060 void prepend(IWvStream *data, bool autofree, WvString id);
00061
00062 private:
00063 bool in_select;
00064 bool dead_stream;
00065
00066 #ifndef _WIN32
00067 static void onfork(pid_t p);
00068 #endif
00069
00070 public:
00071 void append(IWvStream *s, bool auto_free, const char *id)
00072 {
00073 if (s->wsname() == NULL)
00074 s->set_wsname(id);
00075 WvIStreamListBase::append(s, auto_free, id);
00076 }
00077 void append(IWvStream *s, bool auto_free, WVSTRING_FORMAT_DECL)
00078 {
00079 if (s->wsname() == NULL)
00080 s->set_wsname(WvString(WVSTRING_FORMAT_CALL));
00081 WvIStreamListBase::append(s, auto_free, s->wsname());
00082 }
00083
00084 public:
00085 const char *wstype() const { return "WvIStreamList"; }
00086
00087 private:
00088 static void add_debugger_commands();
00089 private:
00090 static WvString debugger_globallist_run_cb(WvStringParm cmd,
00091 WvStringList &args,
00092 WvStreamsDebugger::ResultCallback result_cb, void *);
00093 };
00094
00095 #endif // __WVISTREAMLIST_H