1:- module(st_file, [
2 st_cached/2, 3 st_resolve/3, 4 st_cache_put/2, 5 st_cache_invalidate/0,
6 st_resolve_include/3 7]).
14:- use_module(library(option)). 15
16:- dynamic(template/2).
23st_cached(File, Template):-
24 with_mutex(st_cache,
25 cached_unsafe(File, Template)).
26
27cached_unsafe(File, Template):-
28 template(File, Template).
34st_cache_invalidate:-
35 retractall(template(_, _)).
42st_resolve(File, AbsFile, Options):-
43 option(extension(Ext), Options),
44 absolute_file_name(File, Abs),
45 atomic_list_concat([Abs, '.', Ext], AbsFile).
52st_resolve_include(Include, File, Abs):-
53 absolute_file_name(Include, Abs, [relative_to(File)]).
60st_cache_put(File, Template):-
61 with_mutex(st_cache,
62 st_cache_put_unsafe(File, Template)).
63
64st_cache_put_unsafe(File, Template):-
65 ( template(File, _)
66 -> true
67 ; assertz(template(File, Template)))
File handling
Handles file paths and caching. */