Verified Commit 363be4c1 authored by Alberto Miranda's avatar Alberto Miranda ♨️
Browse files

Add encoding functions for ADM_adhoc_context_t

parent d998f21d
Loading
Loading
Loading
Loading
+73 −1
Original line number Diff line number Diff line
@@ -64,7 +64,8 @@ hg_proc_ADM_dataset_list_t(hg_proc_t proc, void* data) {
            }

            // loop and create list elements
            tmp = (ADM_dataset_list_t) calloc(1, sizeof(struct adm_dataset_list));
            tmp = (ADM_dataset_list_t) calloc(1,
                                              sizeof(struct adm_dataset_list));
            tmp->l_length = length;
            tmp->l_datasets =
                    (adm_dataset*) calloc(length, sizeof(adm_dataset));
@@ -93,3 +94,74 @@ hg_proc_ADM_dataset_list_t(hg_proc_t proc, void* data) {

    return ret;
}

hg_return_t
hg_proc_ADM_adhoc_context_t(hg_proc_t proc, void* data) {

    hg_return_t ret = HG_SUCCESS;
    ADM_adhoc_context_t* ctx = (ADM_adhoc_context_t*) data;
    ADM_adhoc_context_t tmp = NULL;
    hg_size_t ctx_length = 0;

    switch(hg_proc_get_op(proc)) {

        case HG_ENCODE:
            // find out the length of the context
            ctx_length = *ctx ? sizeof(adm_adhoc_context) : 0;
            ret = hg_proc_hg_size_t(proc, &ctx_length);

            if(ret != HG_SUCCESS) {
                break;
            }

            if(!ctx_length) {
                return HG_SUCCESS;
            }

            // if not NULL, write the context
            tmp = *ctx;
            ret = hg_proc_adm_adhoc_context(proc, tmp);

            if(ret != HG_SUCCESS) {
                break;
            }

            break;

        case HG_DECODE: {

            // find out the length of the context
            ret = hg_proc_hg_size_t(proc, &ctx_length);

            if(ret != HG_SUCCESS) {
                break;
            }

            if(!ctx_length) {
                *ctx = NULL;
                break;
            }

            // if not NULL, read the context
            tmp = (ADM_adhoc_context_t) calloc(
                    1, sizeof(struct adm_adhoc_context));
            ret = hg_proc_adm_adhoc_context(proc, tmp);

            if(ret != HG_SUCCESS) {
                break;
            }

            // return the newly-created ctx
            *ctx = tmp;
            break;
        }

        case HG_FREE:
            tmp = *ctx;
            free(tmp);
            ret = HG_SUCCESS;
            break;
    }

    return ret;
}
+3 −1
Original line number Diff line number Diff line
@@ -206,6 +206,8 @@ struct adm_dataset_list {
hg_return_t
hg_proc_ADM_dataset_list_t(hg_proc_t proc, void* data);

hg_return_t
hg_proc_ADM_adhoc_context_t(hg_proc_t proc, void* data);

/** The I/O requirements for a job */
typedef struct adm_job_requirements {
@@ -222,7 +224,7 @@ MERCURY_GEN_STRUCT_PROC(
    adm_job_requirements,
        ((ADM_dataset_list_t) (r_inputs))
        ((ADM_dataset_list_t) (r_outputs))
        ((adm_adhoc_context) (r_adhoc_ctx))
        ((ADM_adhoc_context_t) (r_adhoc_ctx))
);
// clang-format on