#!/usr/bin/env python3

import argparse

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--max_args', type=int, help='Max number of arguments to generate case statements for', required=True)
    parser.add_argument('--output', help='Output header file to include', required=True)
    args = parser.parse_args()

    output=''
    for i in range(args.max_args+1):
        output += 'case %d:\n'%(i)
        output += '((void (*)(kmp_int32 *, kmp_int32 *\n'
        for j in range(i):
            output += ', void *'
            if (j+1)%4 == 0:
                output += '\n'
        output += '))fn)(&global_tid, &bound_tid\n'
        for j in range(i):
            output += ', args[%d]'%(j)
            if (j+1)%4 == 0:
                output += '\n'
        output += ');\n'
        output += 'break;\n'

    with open(args.output, 'w') as f:
        print(output, file=f)

if __name__ == "__main__":
    main()
