Make WvStreams compile with gcc 4.4.
[wvstreams.git] / include / wvistreamlist.h
blobce5244cc4604adea3310ac60b9bb708107e0060b
1 /* -*- Mode: C++ -*-
2 * Worldvisions Weaver Software:
3 * Copyright (C) 1997-2002 Net Integration Technologies, Inc.
4 *
5 * FIXME: Suspiciously similar to wvstreamlist, and with tons of duplicated
6 * code. Blech.
7 */
8 #ifndef __WVISTREAMLIST_H
9 #define __WVISTREAMLIST_H
11 #include "wvstream.h"
13 /** Create the WvStreamListBase class - a simple linked list of WvStreams */
14 DeclareWvList2(WvIStreamListBase, IWvStream);
16 /**
17 * WvStreamList holds a list of WvStream objects -- and its select() and
18 * callback() functions know how to handle multiple simultaneous streams.
20 class WvIStreamList : public WvStream, public WvIStreamListBase
22 public:
23 WvIStreamList();
24 virtual ~WvIStreamList();
25 virtual bool isok() const;
26 virtual void pre_select(SelectInfo &si);
27 virtual bool post_select(SelectInfo &si);
28 virtual void execute();
30 void unlink(IWvStream *data)
31 { sure_thing.unlink(data); WvIStreamListBase::unlink(data); }
33 void add_after(WvLink *after, IWvStream *data, bool autofree,
34 const char *id)
36 WvIStreamListBase::add_after(after, data, autofree, id);
38 void add(IWvStream *data, bool autofree, const char *id)
40 WvIStreamListBase::add(data, autofree, id);
42 void prepend(IWvStream *data, bool autofree, const char *id)
44 WvIStreamListBase::prepend(data, autofree, id);
47 public:
48 bool auto_prune; // remove !isok() streams from the list automatically?
49 static WvIStreamList globallist;
51 protected:
52 WvIStreamListBase sure_thing;
54 private:
55 // Create some undefined overrides to prevent accidentally using a
56 // WvString as an id; these functions will keep a long-term reference to
57 // the string, so you should probably use a string constant.
58 void add_after(WvLink *after, IWvStream *data, bool autofree, WvString id);
59 void add(IWvStream *data, bool autofree, WvString id);
60 void prepend(IWvStream *data, bool autofree, WvString id);
62 private:
63 bool in_select;
64 bool dead_stream;
66 #ifndef _WIN32
67 static void onfork(pid_t p);
68 #endif
70 public:
71 void append(IWvStream *s, bool auto_free, const char *id)
73 if (s->wsname() == NULL)
74 s->set_wsname(id);
75 WvIStreamListBase::append(s, auto_free, id);
77 void append(IWvStream *s, bool auto_free, WVSTRING_FORMAT_DECL)
79 if (s->wsname() == NULL)
80 s->set_wsname(WvString(WVSTRING_FORMAT_CALL));
81 WvIStreamListBase::append(s, auto_free, s->wsname());
84 public:
85 const char *wstype() const { return "WvIStreamList"; }
87 private:
88 static void add_debugger_commands();
89 private:
90 static WvString debugger_globallist_run_cb(WvStringParm cmd,
91 WvStringList &args,
92 WvStreamsDebugger::ResultCallback result_cb, void *);
95 #endif // __WVISTREAMLIST_H