-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstorage.pl
58 lines (49 loc) · 1.73 KB
/
storage.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
:- module(storage, [
find_all_functions/1,
find_all_types/1,
find_all_traits/1,
load_knowledge_base/1,
store_knowledge_base/1,
clear_knowledge_base/0
]).
:- use_module(function).
:- use_module(function/serde).
find_all_functions(Functions) :-
findall(Func, (
get_function(Func),
Func=function(Uuid, _, _, _, _, _),
\+specialized(_, Uuid)
), Functions).
find_all_types(Types) :-
findall(Type, get_type(Type), Types).
find_all_traits(Traits) :-
findall(Trait, get_trait(Trait), Traits).
%% Helpers for listing items.
get_function(function(Uuid, Name, Generics, Inputs, Outputs, Docs)) :-
function(Uuid, Name, Generics, Inputs, Outputs, Docs).
get_type(type(Uuid, Name, Generics, Impls, Docs)) :-
type(Uuid, Name, Generics, Impls, Docs).
get_trait(trait(Name, Bounds)) :-
trait(Name, Bounds).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% JSON persistence
%% load_knowledge_base(+Stream)
% Writes knowledge-base into the stream in JSON format.
load_knowledge_base(Stream) :-
read_json_metadata(Stream, Funcs, Types, Traits),
foreach(member(Func, Funcs), assertz(Func)),
foreach(member(Type, Types), assertz(Type)),
foreach(member(Trait, Traits), assertz(Trait)).
%% store_knowledge_base(+Stream)
% Writes knowledge-base into the stream in JSON format.
store_knowledge_base(Stream) :-
find_all_functions(Functions),
find_all_types(Types),
find_all_traits(Traits),
write_json_metadata(Stream, Functions, Types, Traits).
%% clear_knowledge_base
% Clears all items from the knowledge base
clear_knowledge_base :-
retractall(function(_, _, _, _, _, _)),
retractall(type(_, _, _, _, _)),
retractall(trait(_, _)).