1# vim: set ts=4 sws=4 sw=4:
2
3import sys # stderr
4import copy # deepcopy
5
6from utils import \
7        get_namespace, \
8        get_ext_name, \
9        _n_item, \
10        _ext
11
12class ObjectClass(object):
13    def __init__(self, name):
14        self.name = name
15        self.requests = []
16
17    def add(self, request):
18        if (len(request.parameter_list.parameter) > 0
19                and request.parameter_list.parameter[0].c_type == self.c_name):
20            request_copy = copy.deepcopy(request)
21            request_copy.parameter_list.parameter.pop(0)
22            request_copy.make_wrapped()
23            self.requests.append(request_copy)
24
25    def set_namespace(self, namespace):
26        self.namespace = namespace
27        name = (get_namespace(namespace) + "_") if namespace.is_ext else ""
28        self.c_name = "xcb_%s_t" % (name + self.name.lower())
29
30    def make_inline(self):
31        ns = get_namespace(self.namespace)
32        name = self.name.lower()
33        c_name = self.c_name
34        methods = ""
35
36        for request in self.requests:
37            methods += request.make_object_class_inline(False, self.name.lower()) + "\n\n"
38
39        if methods == "":
40            return ""
41        else:
42            return \
43"""\
44template<typename Derived, typename Connection>
45class %s
46{
47  protected:
48    Connection
49    connection(void) const
50    {
51      return static_cast<const Derived *>(this)->connection();
52    }
53
54    const %s &
55    resource(void) const
56    {
57      return static_cast<const Derived *>(this)->resource();
58    }
59
60  public:
61    virtual ~%s(void) {}
62
63%s
64}; // class %s
65""" % (name,   # class %s
66       c_name, # %s resource(void) { ... }
67       name, # virtual ~%s(void)
68       methods,
69       name) # }; // class %s
70