def renderTypedefSequence(out, typedef): assert (not typedef.extended_attributes) assert (not typedef.type_extended_attributes) template = { \ 'type' : typedef.name, 'name' : instanceName(typedef.name), 't' : emitType(typedef.type.t)} print >> out, "#define CSSOM_%(type)s_acquire(%(name)s) \\" % template print >> out, " (CSSOM_Sequence_acquire((%(name)s)))" % template print >> out print >> out print >> out print >> out, "#define CSSOM_%(type)s_release(%(name)s, index) \\" % template print >> out, " (CSSOM_Sequence_release((%(name)s)))" % template print >> out print >> out print >> out print >> out, "#define CSSOM_%(type)s_length(%(name)s) \\" % template print >> out, " (CSSOM_Sequence_length((%(name)s)))" % template print >> out print >> out print >> out print >> out, "#define CSSOM_%(type)s_at(%(name)s, index) \\" % template print >> out, " ((%(t)s)CSSOM_Sequence_at((%(name)s), (index)))" % template
def renderTypedefSequence(out, typedef): assert(not typedef.extended_attributes) assert(not typedef.type_extended_attributes) template = { \ 'type' : typedef.name, 'name' : instanceName(typedef.name), 't' : emitType(typedef.type.t)} print >>out, "#define CSSOM_%(type)s_acquire(%(name)s) \\" % template print >>out, " (CSSOM_Sequence_acquire((%(name)s)))" % template print >>out print >>out print >>out print >>out, "#define CSSOM_%(type)s_release(%(name)s, index) \\" % template print >>out, " (CSSOM_Sequence_release((%(name)s)))" % template print >>out print >>out print >>out print >>out, "#define CSSOM_%(type)s_length(%(name)s) \\" % template print >>out, " (CSSOM_Sequence_length((%(name)s)))" % template print >>out print >>out print >>out print >>out, "#define CSSOM_%(type)s_at(%(name)s, index) \\" % template print >>out, " ((%(t)s)CSSOM_Sequence_at((%(name)s), (index)))" % template
def renderInterface(out, interface, definitions): assert (not interface.extended_attributes) assert (not interface.callback) template = { \ 'iface' : interface.name, 'inst' : instanceName(interface.name) } if not interface.parent: print >> out, "void CSSOM_%(iface)s_acquire(" % template print >> out, " CSSOM_%(iface)s * %(inst)s);" % template print >> out print >> out print >> out print >> out, "void CSSOM_%(iface)s_release(" % template print >> out, " CSSOM_%(iface)s * %(inst)s);" % template else: template['parent'] = interface.parent print >> out, "#define CSSOM_%(iface)s_acquire(%(inst)s) \\" % template print >>out, " CSSOM_%(parent)s_acquire((CSSOM_%(parent)s*)(%(inst)s))" % \ template print >> out print >> out print >> out print >> out, "#define CSSOM_%(iface)s_release(%(inst)s) \\" % template print >>out, " CSSOM_%(parent)s_release((CSSOM_%(parent)s*)(%(inst)s))" % \ template for member in interface.members: renderInterfaceMember(out, interface, member, definitions)
def renderInterface(out, interface, definitions): assert(not interface.extended_attributes) assert(not interface.callback) template = { \ 'iface' : interface.name, 'inst' : instanceName(interface.name) } if not interface.parent: print >>out, "void CSSOM_%(iface)s_acquire(" % template print >>out, " CSSOM_%(iface)s * %(inst)s);" % template print >>out print >>out print >>out print >>out, "void CSSOM_%(iface)s_release(" % template print >>out, " CSSOM_%(iface)s * %(inst)s);" % template else: template['parent'] = interface.parent print >>out, "#define CSSOM_%(iface)s_acquire(%(inst)s) \\" % template print >>out, " CSSOM_%(parent)s_acquire((CSSOM_%(parent)s*)(%(inst)s))" % \ template print >>out print >>out print >>out print >>out, "#define CSSOM_%(iface)s_release(%(inst)s) \\" % template print >>out, " CSSOM_%(parent)s_release((CSSOM_%(parent)s*)(%(inst)s))" % \ template for member in interface.members: renderInterfaceMember(out, interface, member, definitions)
def attributeSetterSignature(interface, attribute): return "CSSOM_%(iface)s_%(setter)s" \ "(CSSOM_%(iface)s * %(inst)s, %(type)s %(attr)s)" % { \ "iface" : interface.name, "inst" : instanceName(interface.name), "setter" : attributeSetterName(interfaceMemberName(interface, attribute)), "type" : emitType(attribute.type), "attr" : attribute.name }
def operationSignature(interface, operation): inst = "CSSOM_%(iface)s * %(inst)s" % { "iface" : interface.name, "inst" : instanceName(interface.name)} if isGetterOperation(operation): inst = "const %s" % inst return "CSSOM_%(iface)s_%(op)s(%(inst)s, %(args)s)" % { \ "iface" : interface.name, "inst" : inst, "op" : interfaceMemberName(interface, operation), "args" : ", ".join([emitArgument(arg) for arg in operation.arguments])}
def operationSignature(interface, operation): inst = "CSSOM_%(iface)s * %(inst)s" % { "iface": interface.name, "inst": instanceName(interface.name) } if isGetterOperation(operation): inst = "const %s" % inst return "CSSOM_%(iface)s_%(op)s(%(inst)s, %(args)s)" % { \ "iface" : interface.name, "inst" : inst, "op" : interfaceMemberName(interface, operation), "args" : ", ".join([emitArgument(arg) for arg in operation.arguments])}
def renderInterface(out, interface, definitions): assert (not interface.extended_attributes) assert (not interface.callback) classDef = interface.name if interface.parent: classDef = "%s : public cssom::%s" % ( \ classDef, interface.parent) template = {'name': interface.name} print >> out, "class %s {" % classDef print >> out, " public:" print >> out, " typedef CSSOM_%(name)s * Impl;" % template print >> out if interface.parent: template.update({ 'inst': instanceName(interface.parent), 'parent': interface.parent }) print >>out, " static cssom::%(name)s cast(" \ "const cssom::%(parent)s & %(inst)s);" % template print >>out, " static cssom::%(name)s & cast(" \ "cssom::%(parent)s & %(inst)s);" % template print >> out print >> out, " %(name)s();" % template print >> out, " explicit %(name)s(cssom::%(name)s::Impl impl);" % template if not interface.parent: print >> out, " %(name)s(const cssom::%(name)s ©);" % template print >> out, " ~%(name)s();" % template print >> out print >>out, " cssom::%(name)s& operator=(" \ "const cssom::%(name)s &rhs);" % template print >> out print >>out, " bool operator==(" \ "const cssom::%(name)s &rhs) const;" % template print >> out print >> out, " bool isNull() const;" print >> out print >> out, " void swap(cssom::%(name)s &rhs);" % template renderSpecialOperations(out, interface.members) for member in interface.members: renderInterfaceMember(out, interface, member, definitions) if not interface.parent: print >> out print >> out, " protected:" print >> out, " cssom::%(name)s::Impl _impl;" % template print >> out, "};"
def renderInterface(out, interface, definitions): assert(not interface.extended_attributes) assert(not interface.callback) classDef = interface.name if interface.parent: classDef = "%s : public cssom::%s" % ( \ classDef, interface.parent) template = { 'name' : interface.name } print >>out, "class %s {" % classDef print >>out, " public:" print >>out, " typedef CSSOM_%(name)s * Impl;" % template; print >>out if interface.parent: template.update({ 'inst' : instanceName(interface.parent), 'parent' : interface.parent}) print >>out, " static cssom::%(name)s cast(" \ "const cssom::%(parent)s & %(inst)s);" % template print >>out, " static cssom::%(name)s & cast(" \ "cssom::%(parent)s & %(inst)s);" % template print >>out print >>out, " %(name)s();" % template print >>out, " explicit %(name)s(cssom::%(name)s::Impl impl);" % template if not interface.parent: print >>out, " %(name)s(const cssom::%(name)s ©);" % template print >>out, " ~%(name)s();" % template print >>out print >>out, " cssom::%(name)s& operator=(" \ "const cssom::%(name)s &rhs);" % template print >>out print >>out, " bool operator==(" \ "const cssom::%(name)s &rhs) const;" % template print >>out print >>out, " bool isNull() const;" print >>out print >>out, " void swap(cssom::%(name)s &rhs);" % template renderSpecialOperations(out, interface.members) for member in interface.members: renderInterfaceMember(out, interface, member, definitions) if not interface.parent: print >>out print >>out, " protected:" print >>out, " cssom::%(name)s::Impl _impl;" % template print >>out, "};"
def attributeGetterSignature(interface, attribute): return "CSSOM_%(iface)s_%(attr)s(const CSSOM_%(iface)s * %(inst)s)" % { \ "attr" : interfaceMemberName(interface, attribute), "inst" : instanceName(interface.name), "iface" : interface.name }
def renderInterface(out, interface, definitions): template = { "name" : interface.name } if not interface.parent: print >>out print >>out print >>out print >>out, "%(name)s::%(name)s() :" % template print >>out, " _impl(NULL)" print >>out, "{}" print >>out print >>out print >>out print >>out, "%(name)s::%(name)s(cssom::%(name)s::Impl impl) :" % template print >>out, " _impl(impl)" print >>out, "{" print >>out, " CSSOM_%(name)s_acquire(_impl);" % template print >>out, "}" print >>out print >>out print >>out print >>out, "%(name)s::%(name)s(const cssom::%(name)s ©) :" % template print >>out, " _impl(copy._impl)" print >>out, "{" print >>out, " CSSOM_%(name)s_acquire(_impl);" % template print >>out, "}" print >>out print >>out print >>out print >>out, "%(name)s::~%(name)s() {" % template print >>out, " CSSOM_%(name)s_release(_impl);" % template print >>out, "}" print >>out print >>out print >>out print >>out, "cssom::%(name)s& %(name)s::operator=(" % template print >>out, " const cssom::%(name)s &rhs)" % template print >>out, "{" print >>out, " if (&rhs == this) return *this;" print >>out print >>out, " cssom::%(name)s(rhs).swap(*this);" % template print >>out print >>out, " return *this;" print >>out, "}" print >>out print >>out print >>out print >>out, "bool %(name)s::operator==(" % template print >>out, " const cssom::%(name)s &rhs) const" % template print >>out, "{" print >>out, " return _impl == rhs._impl;" print >>out, "}" print >>out print >>out print >>out print >>out, "bool %(name)s::isNull() const {" % template print >>out, " return _impl == NULL;" print >>out, "}" print >>out print >>out print >>out print >>out, "void %(name)s::swap(cssom::%(name)s &rhs) {" % template print >>out, " std::swap(_impl, rhs._impl);" print >>out, "}" else: template.update({ 'parent' : interface.parent, 'inst': instanceName(interface.parent)}) print >>out print >>out print >>out print >>out, "%(name)s %(name)s::cast(" % template print >>out, " const cssom::%(parent)s & %(inst)s)" % template print >>out, "{" print >>out, "#ifndef NDEBUG" print >>out, " cssom::checkCast<cssom::%(parent)s, cssom::%(name)s>(" \ "%(inst)s);" % template print >>out, "#endif // NDEBUG" print >>out, " return static_cast<const cssom::%(name)s &>(" \ "%(inst)s);" % template print >>out, "}" print >>out print >>out print >>out print >>out, "%(name)s & %(name)s::cast(" % template print >>out, " cssom::%(parent)s & %(inst)s)" % template print >>out, "{" print >>out, "#ifndef NDEBUG" print >>out, " cssom::checkCast<cssom::%(parent)s, cssom::%(name)s>(" \ "%(inst)s);" % template print >>out, "#endif // NDEBUG" print >>out, " return static_cast<cssom::%(name)s &>(" \ "%(inst)s);" % template print >>out, "}" print >>out print >>out print >>out print >>out, "%(name)s::%(name)s() :" % template print >>out, " %(parent)s()" % template print >>out, "{}" print >>out print >>out print >>out print >>out, "%(name)s::%(name)s(cssom::%(name)s::Impl impl) :" % template print >>out, " %(parent)s((cssom::%(parent)s::Impl)impl)" % template print >>out, "{}" renderSpecialOperations(out, interface) for member in interface.members: renderInterfaceMember(out, interface, member, definitions)