Example #1
0
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
Example #2
0
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
Example #3
0
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
Example #4
0
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
Example #5
0
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