/* CHANGELOG by M.Banbara
  - print_times/4 --> print_times/5
  - report_csv/2 is added.
*/


deref(N):-
        make_list(500, L1, _),
        make_list(500, L2, Last),
        bind_forward(L1),
        bind_backward(L2),
        L2 = [a|_],
        statistics(runtime,[T1|_]),
        ref(N, L1),
        statistics(runtime,[T2|_]),
        ref(N, Last),
        statistics(runtime,[T3|_]),
        print_times(deref(N),T1,T2,T3,N,12).

%print_times(T1,T2,T3,X,I) :-        /* prints the results */
%        TT1 is T2 - T1,
%        TT2 is T3 - T2,
%        abs_diff(TT1, TT2, TT),
%        write('T first loop:    '),write(TT1), nl,
%        write('T second loop:   '),write(TT2), nl,
%        write('T net:           '),write(TT),nl,
%        write('KLips:           '),
%        Li is I * X,
%        Lips is Li / TT,
%        KLips is Lips / 1000,
%        write(KLips),nl,nl.
print_times(Name,T1,T2,T3,X,I) :-        /* prints the results */
        TT1 is T2 - T1,
        TT2 is T3 - T2,
        abs_diff(TT1, TT2, TT),
        write('# Name:             '),write(Name), nl,
        write('# T first loop:     '),write(TT1), write(' msec.'),nl,
        write('# T second loop:    '),write(TT2), write(' msec.'),nl,
        write('# T net:            '),write(TT),write(' msec.'),nl,
        write('# KLips:            '),
        Li is I * X,
        Lips is Li / TT,
        KLips is Lips / 1000,
        write(KLips),nl,
	report_csv(['###CSV###',Name,TT1,TT2,TT,KLips], ','),
	nl.

report_csv([], _) :- !.
report_csv([X], _) :- !, write(X), nl.
report_csv([X|Xs], Delim) :- write(X), write(Delim), report_csv(Xs, Delim).

abs_diff(X,Y,Z) :- X > Y, !, Z is X - Y.
abs_diff(X,Y,Z) :- Z is Y - X.

/*
 * Bind repeatively a cons cell to another one.
 */
ref(0, _) :- !.
ref(N, Cons) :-
        Cons = [a|_],
        Cons = [a|_],
        Cons = [a|_],
        Cons = [a|_],
        Cons = [a|_],
        Cons = [a|_],
        Cons = [a|_],
        Cons = [a|_],
        Cons = [a|_],
        Cons = [a|_],
        N1 is N - 1,
        ref(N1, Cons).

/*
 * Create a variable chain if in ?- equal(X, Y) the system binds
 * X to Y.
 */
bind_forward([a]) :- !.
bind_forward([X, Y|T]) :-
        equal(X, Y),
        bind_forward([Y|T]).

/*
 * Create a variable chain if in ?- equal(X, Y) the system binds
 * Y to X.
 */
bind_backward([X]) :- !.
bind_backward([X, Y|T]) :-
        bind_backward([Y|T]),
        equal(X, Y).

equal(X, X).

/*
 * Create a list containing variables and return the pointer to the
 * first and to the last cons cell.
 */
make_list(1, L, L) :-
        L = [X],
        !.
make_list(N, [X|Rest], Last) :-
        N1 is N - 1,
        make_list(N1, Rest, Last).
