| 1 | % (c) 2014-2021 Lehrstuhl fuer Softwaretechnik und Programmiersprachen, | |
| 2 | % Heinrich Heine Universitaet Duesseldorf | |
| 3 | % This software is licenced under EPL 1.0 (http://www.eclipse.org/org/documents/epl-v10.html) | |
| 4 | :- module(master, [start_master/8 | |
| 5 | % , hash_matches/2 % no longer exported | |
| 6 | ]). | |
| 7 | ||
| 8 | :- use_module(library(fastrw),[ fast_buf_read/2,fast_buf_write/3 ]). | |
| 9 | :- use_module(probsrc(module_information)). | |
| 10 | :- use_module(extension('zmq/zmq'), [init_zmq/0, master_main/10, alloc_term/3]). | |
| 11 | ||
| 12 | :- module_info(group,zmq). | |
| 13 | :- module_info(description,'This is the interface to C code for distributed model checking.'). | |
| 14 | ||
| 15 | %get_initialisation(Term) :- | |
| 16 | % consult('/Users/bendisposto/Puzzle.eventb'), | |
| 17 | % package(Term), | |
| 18 | % (Term = load_event_b_project(_A,_B,_C,_D) -> true ; print(err(Term)),nl). | |
| 19 | ||
| 20 | :- dynamic assertion_count/1. | |
| 21 | ||
| 22 | get_first_workpackage(assertions(_,_,_),assertions) :- | |
| 23 | assertion_count(N), | |
| 24 | print(nr_of_assertions(N)),nl,flush_output, | |
| 25 | set_assertion_mode(N). | |
| 26 | get_first_workpackage(_,state(root)). | |
| 27 | ||
| 28 | :- use_module(probsrc(error_manager)). | |
| 29 | set_assertion_mode(N) :- add_error(zmq,'Note yet implemented:',set_assertion_mode(N)). | |
| 30 | ||
| 31 | %hash_matches(State,Hash) :- | |
| 32 | % init_zmq_master, | |
| 33 | % fast_buf_write(State,_Len1,_Addr1), | |
| 34 | % gen_hash(_Addr1,_Len1,Hash). | |
| 35 | ||
| 36 | :- use_module(probsrc(debug)). | |
| 37 | ||
| 38 | % TODO: Recovery is not yet implemented | |
| 39 | start_master(Term,MaxStates,PortStart,Strict,MasterIP,Logfile,TmpDir,HashCycle) :- | |
| 40 | init_zmq, | |
| 41 | get_first_workpackage(Term,WP), | |
| 42 | fast_buf_write(Term,Len1,Addr1), | |
| 43 | print(size_model(Len1)),nl,flush_output, | |
| 44 | alloc_term(Addr1, Len1, ModelChunk), | |
| 45 | fast_buf_write(WP,Len2,Addr2), | |
| 46 | alloc_term(Addr2, Len2, FWPChunk), | |
| 47 | %AssertionMode = 0, | |
| 48 | master_main(PortStart, MaxStates, Strict, ModelChunk, FWPChunk, MasterIP, Logfile, TmpDir,HashCycle,RetVal), !, | |
| 49 | print(retval(RetVal)),nl,flush_output, | |
| 50 | RetVal == 0. | |
| 51 | ||
| 52 | %find_hash(H,ID,B) :- | |
| 53 | % state_space:visited_expression(ID,B), | |
| 54 | % hash_matches(state(B),H). |