mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
112 lines
3.0 KiB
Python
112 lines
3.0 KiB
Python
MAX_ARGS = 10
|
|
|
|
def gen_args_type(args):
|
|
ret = ["C o", "M m"]
|
|
for arg in range(0, args):
|
|
ret.append("A%d a%d"%(arg, arg))
|
|
return ", ".join(ret)
|
|
|
|
def gen_args(args):
|
|
ret = ["o", "m"]
|
|
for arg in range(0, args):
|
|
ret.append("a%d"%(arg))
|
|
return ", ".join(ret)
|
|
|
|
def gen_args_(args):
|
|
ret = []
|
|
for arg in range(0, args):
|
|
ret.append("a%d_"%(arg))
|
|
return ", ".join(ret)
|
|
|
|
def gen_init(args, r = False):
|
|
ret = ["o_(o)", "m_(m)"]
|
|
if r:
|
|
ret.append("r_(r)")
|
|
|
|
for arg in range(0, args):
|
|
ret.append("a%d_(a%d)"%(arg, arg))
|
|
return ", ".join(ret)
|
|
|
|
def gen_typenames(args):
|
|
ret = ["typename C", "typename M"]
|
|
for arg in range(0, args):
|
|
ret.append("typename A%d"%(arg))
|
|
return ", ".join(ret)
|
|
|
|
def gen_types(args):
|
|
ret = ["C", "M"]
|
|
for arg in range(0, args):
|
|
ret.append("A%d"%(arg))
|
|
return ", ".join(ret)
|
|
|
|
|
|
def generate_class_template(args, ret = False):
|
|
print "// %d arguments --"%args
|
|
if not ret:
|
|
print "template<"+ gen_typenames(args) + "> class runnable_args%d : public runnable_args_base {"%args
|
|
else:
|
|
print "template<"+ gen_typenames(args) + ", typename R> class runnable_args%d_ret : public runnable_args_base {"%args
|
|
|
|
print " public:"
|
|
|
|
if not ret:
|
|
print " runnable_args%d("%args + gen_args_type(args) + ") :"
|
|
print " " + gen_init(args) + " {}"
|
|
else:
|
|
print " runnable_args%d_ret("%args + gen_args_type(args) + ", R *r) :"
|
|
print " " + gen_init(args, True) + " {}"
|
|
print
|
|
print " NS_IMETHOD Run() {"
|
|
if not ret:
|
|
print " ((*o_).*m_)(" + gen_args_(args) + ");"
|
|
else:
|
|
print " *r_ = ((*o_).*m_)(" + gen_args_(args) + ");"
|
|
print " return NS_OK;"
|
|
print " }"
|
|
print
|
|
print " private:"
|
|
print " C o_;"
|
|
print " M m_;"
|
|
if ret:
|
|
print " R* r_;"
|
|
for arg in range(0, args):
|
|
print " A%d a%d_;"%(arg, arg)
|
|
print "};"
|
|
print
|
|
print
|
|
print
|
|
|
|
def generate_function_template(args):
|
|
print "// %d arguments --"%args
|
|
print "template<" + gen_typenames(args) + ">"
|
|
print "runnable_args%d<"%args + gen_types(args) + ">* WrapRunnable(" + gen_args_type(args) + ") {"
|
|
print " return new runnable_args%d<"%args + gen_types(args) + ">"
|
|
print " (" + gen_args(args) + ");"
|
|
print "}"
|
|
print
|
|
|
|
def generate_function_template_ret(args):
|
|
print "// %d arguments --"%args
|
|
print "template<" + gen_typenames(args) + ", typename R>"
|
|
print "runnable_args%d_ret<"%args + gen_types(args) + ", R>* WrapRunnableRet(" + gen_args_type(args) + ", R* r) {"
|
|
print " return new runnable_args%d_ret<"%args + gen_types(args) + ", R>"
|
|
print " (" + gen_args(args) + ", r);"
|
|
print "}"
|
|
print
|
|
|
|
for num_args in range (0, MAX_ARGS):
|
|
generate_class_template(num_args)
|
|
generate_class_template(num_args, True)
|
|
|
|
print
|
|
print
|
|
print
|
|
|
|
for num_args in range(0, MAX_ARGS):
|
|
generate_function_template(num_args)
|
|
generate_function_template_ret(num_args)
|
|
|
|
|
|
|
|
|