3 * (c) 2010 Alexander Warg <warg@os.inf.tu-dresden.de>
4 * economic rights: Technische Universität Dresden (Germany)
6 * This file is part of TUD:OS and distributed under the terms of the
7 * GNU General Public License 2.
8 * Please see the COPYING-GPL-2 file for details.
12 #include <l4/cxx/ipc_server>
13 #include <l4/cxx/ref_ptr>
14 #include <l4/re/util/object_registry>
18 namespace Mag_server {
22 class Object : public L4::Server_object
25 friend class Object_gc;
26 template< typename T >
27 friend class Gc_ref_count;
47 void enqueue(Object **q)
59 Object() : _ref_cnt(0), _pn(0)
62 void add_ref() const throw() { ++_ref_cnt; }
63 int remove_ref() const throw() { return --_ref_cnt; }
65 virtual void destroy() = 0;
66 virtual ~Object() = 0;
72 assert (_pn == 0); // must not be queued
78 class Registry : protected L4Re::Util::Object_registry
81 L4::Cap<void> register_obj(cxx::Ref_ptr<Object> o)
84 L4::Cap<void> r = L4Re::Util::Object_registry::register_obj(o.ptr());
87 add_gc_obj(o.release());
92 L4::Cap<void> register_obj(cxx::Ref_ptr<Object> o, char const *name)
94 L4::Cap<void> r = L4Re::Util::Object_registry::register_obj(o.ptr(), name);
97 add_gc_obj(o.release());
102 virtual void add_gc_obj(Object *o) = 0;
104 using L4Re::Util::Object_registry::dispatch;