fix new files
git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1960 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
parent
9937158c98
commit
93897e4ef4
@ -0,0 +1,166 @@
|
||||
/* $Id: chr_compiler_errors.pl,v 1.2 2007-10-16 23:40:07 vsc Exp $
|
||||
|
||||
Part of CHR (Constraint Handling Rules)
|
||||
|
||||
Author: Tom Schrijvers
|
||||
E-mail: Tom.Schrijvers@cs.kuleuven.be
|
||||
WWW: http://www.swi-prolog.org
|
||||
Copyright (C): 2005, K.U. Leuven
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
As a special exception, if you link this library with other files,
|
||||
compiled with a Free Software compiler, to produce an executable, this
|
||||
library does not by itself cause the resulting executable to be covered
|
||||
by the GNU General Public License. This exception does not however
|
||||
invalidate any other reasons why the executable file might be covered by
|
||||
the GNU General Public License.
|
||||
*/
|
||||
:- module(chr_compiler_errors,
|
||||
[
|
||||
chr_info/3,
|
||||
chr_warning/3,
|
||||
chr_error/3,
|
||||
print_chr_error/1
|
||||
]).
|
||||
|
||||
:- use_module(chr_compiler_options).
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% chr_info(+Type,+FormattedMessage,+MessageParameters)
|
||||
|
||||
chr_info(_,Message,Params) :-
|
||||
( \+verbosity_on ->
|
||||
true
|
||||
;
|
||||
long_line_with_equality_signs,
|
||||
format(user_error,'CHR compiler:\n',[]),
|
||||
format(user_error,Message,Params),
|
||||
long_line_with_equality_signs
|
||||
).
|
||||
|
||||
|
||||
%% SWI begin
|
||||
verbosity_on :-
|
||||
current_prolog_flag(verbose,V), V \== silent,
|
||||
current_prolog_flag(verbose_load,true).
|
||||
%% SWI end
|
||||
|
||||
%% SICStus begin
|
||||
%% verbosity_on. % at the moment
|
||||
%% SICStus end
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% chr_warning(+Type,+FormattedMessage,+MessageParameters)
|
||||
|
||||
chr_warning(deprecated(Term),Message,Params) :- !,
|
||||
long_line_with_equality_signs,
|
||||
format(user_error,'CHR compiler WARNING: deprecated syntax ~w.\n',[Term]),
|
||||
format(user_error,' `--> ',[]),
|
||||
format(user_error,Message,Params),
|
||||
format(user_error,' Support for deprecated syntax will be discontinued in the near future!\n',[]),
|
||||
long_line_with_equality_signs.
|
||||
|
||||
chr_warning(internal,Message,Params) :- !,
|
||||
long_line_with_equality_signs,
|
||||
format(user_error,'CHR compiler WARNING: something unexpected happened in the CHR compiler.\n',[]),
|
||||
format(user_error,' `--> ',[]),
|
||||
format(user_error,Message,Params),
|
||||
format(user_error,' Your program may not have been compiled correctly!\n',[]),
|
||||
format(user_error,' Please contact tom.schrijvers@cs.kuleuven.be.\n',[]),
|
||||
long_line_with_equality_signs.
|
||||
|
||||
chr_warning(unsupported_pragma(Pragma,Rule),Message,Params) :- !,
|
||||
long_line_with_equality_signs,
|
||||
format(user_error,'CHR compiler WARNING: unsupported pragma ~w in ~@.\n',[Pragma,format_rule(Rule)]),
|
||||
format(user_error,' `--> ',[]),
|
||||
format(user_error,Message,Params),
|
||||
format(user_error,' Pragma is ignored!\n',[]),
|
||||
long_line_with_equality_signs.
|
||||
chr_warning(problem_pragma(Pragma,Rule),Message,Params) :- !,
|
||||
long_line_with_equality_signs,
|
||||
format(user_error,'CHR compiler WARNING: unsupported pragma ~w in ~@.\n',[Pragma,format_rule(Rule)]),
|
||||
format(user_error,' `--> ',[]),
|
||||
format(user_error,Message,Params),
|
||||
long_line_with_equality_signs.
|
||||
|
||||
chr_warning(_,Message,Params) :-
|
||||
( chr_pp_flag(verbosity,on) ->
|
||||
long_line_with_equality_signs,
|
||||
format(user_error,'CHR compiler WARNING:\n',[]),
|
||||
format(user_error,' `--> ',[]),
|
||||
format(user_error,Message,Params),
|
||||
long_line_with_equality_signs
|
||||
;
|
||||
true
|
||||
).
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% chr_error(+Type,+FormattedMessage,+MessageParameters)
|
||||
|
||||
chr_error(Type,Message,Params) :-
|
||||
throw(chr_error(error(Type,Message,Params))).
|
||||
|
||||
print_chr_error(error(Type,Message,Params)) :-
|
||||
print_chr_error(Type,Message,Params).
|
||||
|
||||
print_chr_error(syntax(Term),Message,Params) :- !,
|
||||
long_line_with_equality_signs,
|
||||
format(user_error,'CHR compiler ERROR: invalid syntax "~w".\n',[Term]),
|
||||
format(user_error,' `--> ',[]),
|
||||
format(user_error,Message,Params),
|
||||
long_line_with_equality_signs.
|
||||
|
||||
print_chr_error(internal,Message,Params) :- !,
|
||||
long_line_with_equality_signs,
|
||||
format(user_error,'CHR compiler ERROR: something unexpected happened in the CHR compiler.\n',[]),
|
||||
format(user_error,' `--> ',[]),
|
||||
format(user_error,Message,Params),
|
||||
format(user_error,' Please contact tom.schrijvers@cs.kuleuven.be.\n',[]),
|
||||
long_line_with_equality_signs.
|
||||
|
||||
print_chr_error(cyclic_alias(Alias),_Message,_Params) :- !,
|
||||
long_line_with_equality_signs,
|
||||
format(user_error,'CHR compiler ERROR: cyclic alias "~w".\n',[Alias]),
|
||||
format(user_error,' `--> Aborting compilation.\n',[]),
|
||||
long_line_with_equality_signs.
|
||||
|
||||
print_chr_error(_,Message,Params) :-
|
||||
long_line_with_equality_signs,
|
||||
format(user_error,'CHR compiler ERROR:\n',[]),
|
||||
format(user_error,' `--> ',[]),
|
||||
format(user_error,Message,Params),
|
||||
long_line_with_equality_signs.
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
|
||||
format_rule(PragmaRule) :-
|
||||
PragmaRule = pragma(_,_,Pragmas,MaybeName,N),
|
||||
( MaybeName = yes(Name) ->
|
||||
write('rule '), write(Name)
|
||||
;
|
||||
write('rule number '), write(N)
|
||||
),
|
||||
( memberchk(line_number(LineNumber),Pragmas) ->
|
||||
write(' (line '),
|
||||
write(LineNumber),
|
||||
write(')')
|
||||
;
|
||||
true
|
||||
).
|
||||
|
||||
long_line_with_equality_signs :-
|
||||
format(user_error,'================================================================================\n',[]).
|
@ -0,0 +1,136 @@
|
||||
/* $Id: chr_integertable_store.pl,v 1.2 2007-10-16 23:40:07 vsc Exp $
|
||||
|
||||
Part of CHR (Constraint Handling Rules)
|
||||
|
||||
based on chr_hashtable_store (by Tom Schrijvers)
|
||||
Author: Jon Sneyers
|
||||
E-mail: Jon.Sneyers@cs.kuleuven.be
|
||||
WWW: http://www.swi-prolog.org
|
||||
Copyright (C): 2005, K.U. Leuven
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
As a special exception, if you link this library with other files,
|
||||
compiled with a Free Software compiler, to produce an executable, this
|
||||
library does not by itself cause the resulting executable to be covered
|
||||
by the GNU General Public License. This exception does not however
|
||||
invalidate any other reasons why the executable file might be covered by
|
||||
the GNU General Public License.
|
||||
*/
|
||||
|
||||
% is it safe to use nb_setarg here?
|
||||
|
||||
:- module(chr_integertable_store,
|
||||
[ new_iht/1,
|
||||
lookup_iht/3,
|
||||
insert_iht/3,
|
||||
delete_iht/3,
|
||||
value_iht/2
|
||||
]).
|
||||
:- use_module(library(lists)).
|
||||
:- use_module(hprolog).
|
||||
|
||||
%initial_capacity(65536).
|
||||
%initial_capacity(1024).
|
||||
initial_capacity(8).
|
||||
%initial_capacity(2).
|
||||
%initial_capacity(1).
|
||||
|
||||
|
||||
new_iht(HT) :-
|
||||
initial_capacity(Capacity),
|
||||
new_iht(Capacity,HT).
|
||||
|
||||
new_iht(Capacity,HT) :-
|
||||
functor(T1,t,Capacity),
|
||||
HT = ht(Capacity,Table),
|
||||
Table = T1.
|
||||
|
||||
lookup_iht(ht(_,Table),Int,Values) :-
|
||||
Index is Int + 1,
|
||||
arg(Index,Table,Values),
|
||||
Values \= [].
|
||||
% nonvar(Values).
|
||||
|
||||
insert_iht(HT,Int,Value) :-
|
||||
Index is Int + 1,
|
||||
arg(2,HT,Table),
|
||||
(arg(Index,Table,Bucket) ->
|
||||
( var(Bucket) ->
|
||||
Bucket = [Value]
|
||||
;
|
||||
setarg(Index,Table,[Value|Bucket])
|
||||
)
|
||||
; % index > capacity
|
||||
Capacity is 1<<ceil(log(Index)/log(2)),
|
||||
expand_iht(HT,Capacity),
|
||||
insert_iht(HT,Int,Value)
|
||||
).
|
||||
|
||||
delete_iht(ht(_,Table),Int,Value) :-
|
||||
% arg(2,HT,Table),
|
||||
Index is Int + 1,
|
||||
arg(Index,Table,Bucket),
|
||||
( Bucket = [_Value] ->
|
||||
setarg(Index,Table,[])
|
||||
;
|
||||
delete_first_fail(Bucket,Value,NBucket),
|
||||
setarg(Index,Table,NBucket)
|
||||
).
|
||||
%delete_first_fail([], Y, []).
|
||||
%delete_first_fail([_], _, []) :- !.
|
||||
delete_first_fail([X | Xs], Y, Xs) :-
|
||||
X == Y, !.
|
||||
delete_first_fail([X | Xs], Y, [X | Zs]) :-
|
||||
delete_first_fail(Xs, Y, Zs).
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
value_iht(HT,Value) :-
|
||||
HT = ht(Capacity,Table),
|
||||
value_iht(1,Capacity,Table,Value).
|
||||
|
||||
value_iht(I,N,Table,Value) :-
|
||||
I =< N,
|
||||
arg(I,Table,Bucket),
|
||||
(
|
||||
nonvar(Bucket),
|
||||
member(Value,Bucket)
|
||||
;
|
||||
J is I + 1,
|
||||
value_iht(J,N,Table,Value)
|
||||
).
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
expand_iht(HT,NewCapacity) :-
|
||||
HT = ht(Capacity,Table),
|
||||
functor(NewTable,t,NewCapacity),
|
||||
setarg(1,HT,NewCapacity),
|
||||
setarg(2,HT,NewTable),
|
||||
expand_copy(Table,1,Capacity,NewTable,NewCapacity).
|
||||
|
||||
expand_copy(Table,I,N,NewTable,NewCapacity) :-
|
||||
( I > N ->
|
||||
true
|
||||
;
|
||||
arg(I,Table,Bucket),
|
||||
( var(Bucket) ->
|
||||
true
|
||||
;
|
||||
arg(I,NewTable,Bucket)
|
||||
),
|
||||
J is I + 1,
|
||||
expand_copy(Table,J,N,NewTable,NewCapacity)
|
||||
).
|
Reference in New Issue
Block a user