1 % (c) 2009-2018 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
5 :- module(counter, [
6 counter_init/0,
7 new_counter/1,
8 get_counter/2,
9 set_counter/2,
10 inc_counter/1, inc_counter/2,
11 reset_counter/1
12 ]).
13
14 foreign_resource('counter', [new_counter,get_counter,inc_counter,set_counter,reset_counter]).
15 foreign(new_counter, c, new_counter(+atom)).
16 foreign(get_counter, c, get_counter(+atom, [-integer])).
17 foreign(inc_counter, c, inc_counter(+atom, [-integer])).
18 foreign(set_counter, c, set_counter(+atom, +integer)).
19 foreign(reset_counter, c, reset_counter(+atom)).
20
21 % with this line below we need to adapt the Makefile to include the counter resource in the binary:
22 % (maybe this is a good idea)
23 % :- load_foreign_resource(counter).
24
25 :- dynamic loaded/0.
26
27 counter_init :-
28 (loaded -> true
29 ; (assert(loaded),
30 %assert_dir,
31 assert(user:library_directory('.')),
32 %print('loading counter foreign resource'),nl,
33 load_foreign_resource(library(counter)))
34 ).
35
36 inc_counter(Counter) :-
37 inc_counter(Counter, _NewVal).