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