Initial commit based on .zip from Glenn Schmottlach.
[dbus-cxx-async.git] / include / dbus-c++ / pendingcall.h
blobc713c42f7799837b542dde708d4be0c23d4147f3
1 /*
3 * D-Bus++ - C++ bindings for D-Bus
5 * Copyright (C) 2005-2009 Paolo Durante <shackan@gmail.com>
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this library; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25 #ifndef __DBUSXX_PENDING_CALL_H
26 #define __DBUSXX_PENDING_CALL_H
28 #include "api.h"
29 #include "util.h"
30 #include "message.h"
32 #include <list>
34 namespace DBus {
36 class PendingCall;
37 class Connection;
38 class CallInfo;
40 typedef Slot<void, PendingCall &> PendingCallSlot;
42 class DBUSXXAPI PendingCall
44 public:
46 struct Private;
48 PendingCall();
50 PendingCall(Private *);
52 PendingCall(const PendingCall &);
54 virtual ~PendingCall();
56 PendingCall &operator = (const PendingCall &);
58 bool operator == (const PendingCall &) const;
60 bool completed() const;
62 void cancel();
64 void block();
66 void data(void *);
68 void *data() const;
70 const PendingCallSlot &slot() const;
72 private:
74 RefPtrI<Private> _pvt;
76 friend struct Private;
77 friend class Connection;
78 friend class CallInfo;
81 typedef std::list<DBus::PendingCall> PendingCallList;
82 typedef PendingCallList::iterator PendingToken;
84 class PendingCalls : private PendingCallList, public Synchronized
86 public:
88 PendingCalls() {}
90 ~PendingCalls()
92 Guard g(this);
94 while (!empty())
95 PendingCallList::erase(begin());
98 PendingToken insert(DBus::PendingCall &call)
100 Guard g(this);
102 return PendingCallList::insert(end(), call);
105 void erase(const PendingToken& token)
107 Guard g(this);
109 PendingCallList::erase(token);
114 } /* namespace DBus */
116 #endif//__DBUSXX_PENDING_CALL_H