1 :- module(zmq, [init_zmq/0,
2 master_main/10, alloc_term/3,
3 setup_worker/5, work_reactor/1, teardown_worker/0,
4 new_results_message/1, start_timer/0, stop_timer/0,
5 msg_put_str/2, put_succ/4, add_stats/1, send_and_destroy_msg/1]).
6
7 :- use_module('../../src/module_information.pl').
8 :- module_info(group,experimental).
9 :- module_info(description,'This is the interface to C code for distributed model checking.').
10 :- module_info(revision,'$Rev: 9609 $').
11 :- module_info(lastchanged,'$LastChangedDate: 2011-11-18 10:43:02 +0100 (Fr, 18 Nov 2011) $').
12
13 foreign_resource('zmq', [master_main, alloc_term,
14 setup_worker, work_reactor, teardown_worker,
15 new_results_message,
16 start_timer, stop_timer,
17 msg_put_str, put_succ,
18 add_stats, send_and_destroy_msg]).
19
20 % master functions
21 foreign(master_main, c, master_main(+integer,+integer,+integer,+address(zchunk_t),+address(zchunk_t),+string,+string,+string,+integer,[-integer])).
22 foreign(alloc_term, c, alloc_term(+address(char), +integer, [-address(zchunk_t)])).
23
24 % worker functions
25 foreign(setup_worker, c, setup_worker(+integer, +integer, +string, +string, +string)).
26 foreign(work_reactor, c, work_reactor([-integer])).
27 foreign(teardown_worker, c, teardown_worker).
28 foreign(new_results_message, c, new_results_message([-address(zmsg_t)])).
29 foreign(start_timer, c, start_timer).
30 foreign(stop_timer, c, stop_timer).
31 foreign(msg_put_str, c, msg_put_str(+address(zmsg_t), +string)).
32 foreign(put_succ, c, put_succ(+address(zmsg_t), +address(char), +integer, +integer)).
33 foreign(add_stats, c, add_stats(+address(zmsg_t))).
34 foreign(send_and_destroy_msg, c, send_and_destroy_msg(+address(zmsg_t))).
35
36 :- dynamic is_initialised/0.
37
38 init_zmq :- is_initialised,!.
39 init_zmq :-
40 load_foreign_resource(library(zmq)),
41 assert(is_initialised).
42