コード例 #1
0
ファイル: em_aux.c プロジェクト: edechter/PRISM
static int compare_sw_ins(const void *a, const void *b) {
	SW_INS_PTR sw_ins_a, sw_ins_b;
	TERM msw_a, msw_b;

	sw_ins_a = *(const SW_INS_PTR *)(a);
	sw_ins_b = *(const SW_INS_PTR *)(b);

	msw_a = prism_sw_ins_term(sw_ins_a->id);
	msw_b = prism_sw_ins_term(sw_ins_b->id);

	return bpx_compare(bpx_get_arg(1,msw_a), bpx_get_arg(1,msw_b));
}
コード例 #2
0
ファイル: mp_sw.c プロジェクト: vscosta/yap-6.3
int pc_mp_recv_swlayout_0(void)
{
    occ_position = MALLOC(sizeof(int) * occ_switch_tab_size);

    MPI_Recv(occ_position, occ_switch_tab_size, MPI_INT, 0, TAG_SWITCH_RES, MPI_COMM_WORLD, NULL);

    /* debug */
    {
        int i;
        TERM msw;
        for (i = 0; i < occ_switch_tab_size; i++) {
            msw = bpx_get_arg(1, prism_sw_ins_term(occ_switches[i]->id));
            mp_debug("%s -> %d", bpx_term_2_string(msw), occ_position[i]);
        }
    }

    return BP_TRUE;
}
コード例 #3
0
ファイル: mp_sw.c プロジェクト: vscosta/yap-6.3
int pc_mp_send_switches_0(void)
{
    char  *msg, *str;
    TERM  msw;
    int   msglen, msgsiz;
    int   vals[2];
    int   i, n;

    msglen = 0;
    msgsiz = 65536;
    msg = MALLOC(msgsiz);

    for (i = 0; i < occ_switch_tab_size; i++) {
        msw = bpx_get_arg(1, prism_sw_ins_term(occ_switches[i]->id));
        str = (char *)bpx_term_2_string(msw);

        n = strlen(str) + 1;

        if (msgsiz <= msglen + n) {
            msgsiz = (msglen + n + 65536) & ~65535;
            msg = REALLOC(msg, msgsiz);
        }

        strcpy(msg + msglen, str);
        msglen += n;
    }

    msg[msglen++] = '\0'; /* this is safe */

    vals[0] = msglen;
    vals[1] = occ_switch_tab_size;

    MPI_Gather(vals, 2, MPI_INT, NULL, 0, MPI_INT, 0, MPI_COMM_WORLD);
    MPI_Send(msg, msglen, MPI_CHAR, 0, TAG_SWITCH_REQ, MPI_COMM_WORLD);

    free(msg);

    return BP_TRUE;
}