|
17 | 17 |
|
18 | 18 | ******************************************************************************/ |
19 | 19 |
|
| 20 | +#include "algorithms/misc/causalization_json.hpp" |
| 21 | + |
20 | 22 | #include "rapidjson/document.h" |
21 | 23 | #include "rapidjson/filewritestream.h" |
22 | 24 | #include "rapidjson/prettywriter.h" |
23 | 25 |
|
24 | | -#include "algorithms/misc/causalization_json.hpp" |
25 | | - |
26 | | -namespace MISC { |
| 26 | +namespace misc { |
27 | 27 |
|
28 | 28 | using namespace SBG::LIB; |
29 | 29 |
|
30 | | -rapidjson::Value setJson(const Set &s |
31 | | - , rapidjson::Document::AllocatorType &alloc) |
32 | | -{ |
33 | | - rapidjson::Value result(rapidjson::kArrayType); |
34 | | - |
35 | | - for (const SetPiece &mdi : s) { |
36 | | - rapidjson::Value inter_array(rapidjson::kArrayType); |
37 | | - for (const Interval &i : mdi) { |
38 | | - rapidjson::Value inter(rapidjson::kArrayType); |
39 | | - |
40 | | - rapidjson::Value beg; |
41 | | - beg.SetInt(i.begin()); |
42 | | - inter.PushBack(beg, alloc); |
43 | | - rapidjson::Value st; |
44 | | - st.SetInt(i.step()); |
45 | | - inter.PushBack(st, alloc); |
46 | | - rapidjson::Value end; |
47 | | - end.SetInt(i.end()); |
48 | | - inter.PushBack(end, alloc); |
49 | | - |
50 | | - inter_array.PushBack(inter, alloc); |
51 | | - } |
52 | | - rapidjson::Value mdi_obj(rapidjson::kObjectType); |
53 | | - mdi_obj.AddMember("interval", inter_array, alloc); |
54 | | - result.PushBack(mdi_obj, alloc); |
55 | | - } |
56 | | - |
57 | | - return result; |
58 | | -} |
59 | | - |
60 | | -rapidjson::Value expJson(Exp exp, rapidjson::Document::AllocatorType &alloc) |
61 | | -{ |
62 | | - rapidjson::Value result(rapidjson::kArrayType); |
63 | | - |
64 | | - for (const LExp &le : exp) { |
65 | | - rapidjson::Value le_array(rapidjson::kArrayType); |
66 | | - |
67 | | - std::stringstream ssm; |
68 | | - ssm << le.slope(); |
69 | | - rapidjson::Value m; |
70 | | - m.SetString(ssm.str().c_str(), strlen(ssm.str().c_str()), alloc); |
71 | | - le_array.PushBack(m, alloc); |
| 30 | +//////////////////////////////////////////////////////////////////////////////// |
| 31 | +// Causalization result -------------------------------------------------------- |
| 32 | +//////////////////////////////////////////////////////////////////////////////// |
72 | 33 |
|
73 | | - std::stringstream ssh; |
74 | | - ssh << le.offset(); |
75 | | - rapidjson::Value h; |
76 | | - h.SetString(ssh.str().c_str(), strlen(ssh.str().c_str()), alloc); |
77 | | - le_array.PushBack(h, alloc); |
| 34 | +CausalizationResult::CausalizationResult(SBG::LIB::Set horizontal_sorting |
| 35 | + , SBG::LIB::PWMap algebraic_loops |
| 36 | + , SBG::LIB::Set mfvs |
| 37 | + , SBG::LIB::PWMap vertical_sorting) : _horizontal_sorting(horizontal_sorting) |
| 38 | + , _algebraic_loops(algebraic_loops) |
| 39 | + , _mfvs(mfvs) |
| 40 | + , _vertical_sorting(vertical_sorting) {} |
78 | 41 |
|
79 | | - result.PushBack(le_array, alloc); |
80 | | - } |
81 | | - |
82 | | - return result; |
| 42 | +const SBG::LIB::Set& CausalizationResult::horizontal_sorting() const |
| 43 | +{ |
| 44 | + return _horizontal_sorting; |
83 | 45 | } |
84 | 46 |
|
85 | | -rapidjson::Value mapJson( |
86 | | - const PWMap &pw, rapidjson::Document::AllocatorType &alloc |
87 | | -) |
| 47 | +const SBG::LIB::PWMap& CausalizationResult::algebraic_loops() const |
88 | 48 | { |
89 | | - rapidjson::Value result(rapidjson::kArrayType); |
90 | | - |
91 | | - for (const Map &map : pw) { |
92 | | - rapidjson::Value ith(rapidjson::kObjectType); |
93 | | - |
94 | | - ith.AddMember("dom", setJson(map.dom(), alloc), alloc); |
95 | | - ith.AddMember("exp", expJson(map.exp(), alloc), alloc); |
| 49 | + return _algebraic_loops; |
| 50 | +} |
96 | 51 |
|
97 | | - result.PushBack(ith, alloc); |
98 | | - } |
| 52 | +const SBG::LIB::Set& CausalizationResult::mfvs() const { return _mfvs; } |
99 | 53 |
|
100 | | - return result; |
| 54 | +const SBG::LIB::PWMap& CausalizationResult::vertical_sorting() const |
| 55 | +{ |
| 56 | + return _vertical_sorting; |
101 | 57 | } |
102 | 58 |
|
103 | | -void buildJson(const Set &matching, const PWMap &scc, const PWMap &order) |
| 59 | +//////////////////////////////////////////////////////////////////////////////// |
| 60 | +// Build JSON file ------------------------------------------------------------- |
| 61 | +//////////////////////////////////////////////////////////////////////////////// |
| 62 | + |
| 63 | +void toJSON(const CausalizationResult& causalized) |
104 | 64 | { |
105 | | - rapidjson::Document d; |
106 | | - d.SetObject(); |
107 | | - rapidjson::Document::AllocatorType& alloc = d.GetAllocator(); |
| 65 | + // Initialize rapidJSON |
| 66 | + rapidjson::Document document; |
| 67 | + document.SetObject(); |
| 68 | + rapidjson::Document::AllocatorType& alloc = document.GetAllocator(); |
108 | 69 |
|
109 | | - // Create matching information |
110 | | - rapidjson::Value edges = setJson(matching, alloc); |
111 | | - d.AddMember("matching", edges, alloc); |
| 70 | + // Save causalization results |
| 71 | + document.AddMember("horizontal_sorting" |
| 72 | + , causalized.horizontal_sorting().toJSON(alloc), alloc); |
112 | 73 |
|
113 | | - // Create SCC information |
114 | | - rapidjson::Value scc_rmap = mapJson(scc, alloc); |
115 | | - d.AddMember("scc", scc_rmap, alloc); |
| 74 | + document.AddMember("algebraic_loops" |
| 75 | + , causalized.algebraic_loops().toJSON(alloc), alloc); |
116 | 76 |
|
117 | | - // Create sort information |
118 | | - rapidjson::Value order_rmap = mapJson(order, alloc); |
119 | | - d.AddMember("sort", order_rmap, alloc); |
| 77 | + document.AddMember("mfvs", causalized.mfvs().toJSON(alloc), alloc); |
120 | 78 |
|
| 79 | + document.AddMember("vertical_sorting" |
| 80 | + , causalized.vertical_sorting().toJSON(alloc), alloc); |
| 81 | + |
| 82 | + // Write file with rapidJSON |
121 | 83 | FILE *fp = fopen("output.json", "w"); |
122 | 84 | char write_buffer[65536]; |
123 | 85 | rapidjson::FileWriteStream os(fp, write_buffer, sizeof(write_buffer)); |
124 | 86 | rapidjson::PrettyWriter<rapidjson::FileWriteStream> writer(os); |
125 | 87 | rapidjson::PrettyFormatOptions opt = rapidjson::kFormatSingleLineArray; |
126 | 88 | writer.SetFormatOptions(opt); |
127 | | - d.Accept(writer); |
| 89 | + document.Accept(writer); |
128 | 90 |
|
129 | 91 | fclose(fp); |
130 | 92 | } |
131 | 93 |
|
132 | | -} // namespace MISC |
133 | | - |
| 94 | +} // namespace misc |
0 commit comments