def generate_prototype(x): func = gen_client_header.generate_func(x) func = func.replace('\n', ' ') func = ' '.join([x for x in func.split() if x]) func = func.replace('enum ', '') func = func.replace('const ', '') func = func.replace('struct ', '') func = func.rstrip(';') return func
def generate_worker_iterator(call, x): xp = copy.deepcopy(x) xp.name = 'WXYZ' c_func = gen_client_header.generate_func(xp) c_func = c_func.replace('hyperdex_client_WXYZ', '(*f)') c_func = ' '.join([c.strip() for c in c_func.split('\n')]) c_func = c_func.strip('; ') func = 'JNIEXPORT jobject JNICALL\n' func += '_hyperdex_java_client_{0}(JNIEnv* env, jobject obj, {1}'.format( call, c_func) for arg in x.args_in: func += ', ' + CTYPEOF(arg) + ' ' + arg.__name__.lower() func += ')' func += ';\n\n' + func func += '\n{\n' for arg in x.args_in: for p, n in arg.args: func += ' ' + p + ' in_' + n + ';\n' func += ' int success = 0;\n' func += ' struct hyperdex_client* client = hyperdex_get_client_ptr(env, obj);\n' func += ' jobject iter = (*env)->NewObject(env, _iterator, _iterator_init, obj);\n' func += ' struct hyperdex_java_client_iterator* it = NULL;\n' func += ' ERROR_CHECK(0);\n' func += ' it = hyperdex_get_iterator_ptr(env, iter);\n' func += ' ERROR_CHECK(0);\n' for arg in x.args_in: args = ', '.join(['&in_' + n for p, n in arg.args]) func += ' hyperdex_java_client_convert_{0}(env, obj, it->arena, {0}, {1});\n'.format( arg.__name__.lower(), args) func += ' if (success < 0) return 0;\n' func += ' it->reqid = f(client, {0}, {1});\n\n'.format( ', '.join([ 'in_' + n for p, n in sum([list(a.args) for a in x.args_in], []) ]), ', '.join([ '&it->' + n for p, n in sum([list(a.args) for a in x.args_out], []) ])) func += ' if (it->reqid < 0)\n {\n' func += ' hyperdex_java_client_throw_exception(env, it->status, hyperdex_client_error_message(client));\n' func += ' return 0;\n' func += ' }\n\n' func += ' it->encode_return = hyperdex_java_client_iterator_encode_' + '_'.join( [arg.__name__.lower() for arg in x.args_out]) + ';\n' func += ' (*env)->CallObjectMethod(env, obj, _client_add_op, it->reqid, iter);\n' func += ' ERROR_CHECK(0);\n' func += ' return iter;\n' func += '}\n' return func
def generate_worker_asynccall(call, x): xp = copy.deepcopy(x) xp.name = 'WXYZ' c_func = gen_client_header.generate_func(xp) c_func = c_func.replace('hyperdex_client_WXYZ', '(*f)') c_func = ' '.join([c.strip() for c in c_func.split('\n')]) c_func = c_func.strip('; ') func = 'static VALUE\n' func += '_hyperdex_ruby_client_{0}({1}, VALUE self'.format(call, c_func) for arg in x.args_in: func += ', VALUE ' + arg.__name__.lower() func += ')\n{\n' func += ' VALUE dfrd;\n' for arg in x.args_in: for p, n in arg.args: func += ' ' + p + ' in_' + n + ';\n' func += ' struct hyperdex_client* client;\n' func += ' struct hyperdex_ruby_client_deferred* d;\n' func += ' dfrd = rb_class_new_instance(1, &self, class_deferred);\n' func += ' rb_iv_set(self, "tmp", dfrd);\n' func += ' Data_Get_Struct(self, struct hyperdex_client, client);\n' func += ' Data_Get_Struct(dfrd, struct hyperdex_ruby_client_deferred, d);\n' for arg in x.args_in: args = ', '.join(['&in_' + n for p, n in arg.args]) func += ' hyperdex_ruby_client_convert_{0}(d->arena, {0}, {1});\n'.format( arg.__name__.lower(), args) func += ' d->reqid = f(client, {0}, {1});\n\n'.format( ', '.join([ 'in_' + n for p, n in sum([list(a.args) for a in x.args_in], []) ]), ', '.join([ '&d->' + n for p, n in sum([list(a.args) for a in x.args_out], []) ])) func += ' if (d->reqid < 0)\n {\n' func += ' hyperdex_ruby_client_throw_exception(d->status, hyperdex_client_error_message(client));\n' func += ' }\n\n' func += ' d->encode_return = hyperdex_ruby_client_deferred_encode_' + '_'.join( [arg.__name__.lower() for arg in x.args_out]) + ';\n' func += ' rb_hash_aset(rb_iv_get(self, "ops"), LONG2NUM(d->reqid), dfrd);\n' func += ' rb_iv_set(self, "tmp", Qnil);\n' func += ' return dfrd;\n' func += '}\n' return func
def generate_worker_iterator(call, x): xp = copy.deepcopy(x) xp.name = 'WXYZ' c_func = gen_client_header.generate_func(xp) c_func = c_func.replace('hyperdex_client_WXYZ', '(*f)') c_func = ' '.join([c.strip() for c in c_func.split('\n')]) c_func = c_func.strip('; ') func = 'JNIEXPORT HYPERDEX_API jobject JNICALL\n' func += '_hyperdex_java_client_{0}(JNIEnv* env, jobject obj, {1}'.format(call, c_func) for arg in x.args_in: func += ', ' + CTYPEOF(arg) + ' ' + arg.__name__.lower() func += ')' func += ';\n\n' + func func += '\n{\n' for arg in x.args_in: for p, n in arg.args: func += ' ' + p + ' in_' + n + ';\n' func += ' int success = 0;\n' func += ' struct hyperdex_client* client = hyperdex_get_client_ptr(env, obj);\n' func += ' jobject iter = (*env)->NewObject(env, _iterator, _iterator_init, obj);\n' func += ' struct hyperdex_java_client_iterator* it = NULL;\n' func += ' ERROR_CHECK(0);\n' func += ' it = hyperdex_get_iterator_ptr(env, iter);\n' func += ' ERROR_CHECK(0);\n' for arg in x.args_in: args = ', '.join(['&in_' + n for p, n in arg.args]) func += ' hyperdex_java_client_convert_{0}(env, obj, it->arena, {0}, {1});\n'.format(arg.__name__.lower(), args) func += ' if (success < 0) return 0;\n' func += ' it->reqid = f(client, {0}, {1});\n\n'.format(', '.join(['in_' + n for p, n in sum([list(a.args) for a in x.args_in], [])]), ', '.join(['&it->' + n for p, n in sum([list(a.args) for a in x.args_out], [])])) func += ' if (it->reqid < 0)\n {\n' func += ' hyperdex_java_client_throw_exception(env, it->status, hyperdex_client_error_message(client));\n' func += ' return 0;\n' func += ' }\n\n' func += ' it->encode_return = hyperdex_java_client_iterator_encode_' + '_'.join([arg.__name__.lower() for arg in x.args_out]) + ';\n' func += ' (*env)->CallObjectMethod(env, obj, _client_add_op, it->reqid, iter);\n' func += ' ERROR_CHECK(0);\n' func += ' return iter;\n' func += '}\n' return func
def generate_worker_asynccall(call, x): xp = copy.deepcopy(x) xp.name = 'WXYZ' c_func = gen_client_header.generate_func(xp) c_func = c_func.replace('hyperdex_client_WXYZ', '(*f)') c_func = ' '.join([c.strip() for c in c_func.split('\n')]) c_func = c_func.strip('; ') func = 'static VALUE\n' func += '_hyperdex_ruby_client_{0}({1}, VALUE self'.format(call, c_func) for arg in x.args_in: func += ', VALUE ' + arg.__name__.lower() func += ')\n{\n' func += ' VALUE dfrd;\n' for arg in x.args_in: for p, n in arg.args: func += ' ' + p + ' in_' + n + ';\n' func += ' struct hyperdex_client* client;\n' func += ' struct hyperdex_ruby_client_deferred* d;\n' func += ' dfrd = rb_class_new_instance(1, &self, class_deferred);\n' func += ' rb_iv_set(self, "tmp", dfrd);\n' func += ' Data_Get_Struct(self, struct hyperdex_client, client);\n' func += ' Data_Get_Struct(dfrd, struct hyperdex_ruby_client_deferred, d);\n' for arg in x.args_in: args = ', '.join(['&in_' + n for p, n in arg.args]) func += ' hyperdex_ruby_client_convert_{0}(d->arena, {0}, {1});\n'.format(arg.__name__.lower(), args) func += ' d->reqid = f(client, {0}, {1});\n\n'.format(', '.join(['in_' + n for p, n in sum([list(a.args) for a in x.args_in], [])]), ', '.join(['&d->' + n for p, n in sum([list(a.args) for a in x.args_out], [])])) func += ' if (d->reqid < 0)\n {\n' func += ' hyperdex_ruby_client_throw_exception(d->status, hyperdex_client_error_message(client));\n' func += ' }\n\n' func += ' d->encode_return = hyperdex_ruby_client_deferred_encode_' + '_'.join([arg.__name__.lower() for arg in x.args_out]) + ';\n' func += ' rb_hash_aset(rb_iv_get(self, "ops"), LONG2NUM(d->reqid), dfrd);\n' func += ' rb_iv_set(self, "tmp", Qnil);\n' func += ' return dfrd;\n' func += '}\n' return func