comparison utilities/vampipe-convert.cpp @ 25:5b9690d18241

Pull up type determination into VampJson
author Chris Cannam <c.cannam@qmul.ac.uk>
date Tue, 24 May 2016 10:43:34 +0100
parents 533ca5ca3404
children cc85c2851605
comparison
equal deleted inserted replaced
24:533ca5ca3404 25:5b9690d18241
60 { 60 {
61 public: 61 public:
62 enum Direction { 62 enum Direction {
63 Request, Response 63 Request, Response
64 }; 64 };
65 enum Type {
66 List, Load, Configure, Process, Finish, Eof
67 };
68
69 static Type typeForName(string name) {
70 if (name == "list") return List;
71 else if (name == "load") return Load;
72 else if (name == "configure") return Configure;
73 else if (name == "process") return Process;
74 else if (name == "finish") return Finish;
75 else if (name == "eof") return Eof;
76 else {
77 throw runtime_error("unknown or unexpected request/response type \"" +
78 name + "\"");
79 }
80 }
81 65
82 RequestOrResponse() : // nothing by default 66 RequestOrResponse() : // nothing by default
83 direction(Request), 67 direction(Request),
84 type(Eof), 68 type(RRType::NotValid),
85 success(false), 69 success(false),
86 finishPlugin(0) { } 70 finishPlugin(0) { }
87 71
88 Direction direction; 72 Direction direction;
89 Type type; 73 RRType type;
90 bool success; 74 bool success;
91 string errorText; 75 string errorText;
92 76
93 PreservingPluginHandleMapper mapper; 77 PreservingPluginHandleMapper mapper;
94 78
149 RequestOrResponse rr; 133 RequestOrResponse rr;
150 rr.direction = RequestOrResponse::Request; 134 rr.direction = RequestOrResponse::Request;
151 135
152 string input; 136 string input;
153 if (!getline(cin, input)) { 137 if (!getline(cin, input)) {
154 rr.type = RequestOrResponse::Eof; 138 rr.type = RRType::NotValid;
155 return rr; 139 return rr;
156 } 140 }
157 141
158 Json j = convertRequestJson(input); 142 Json j = convertRequestJson(input);
159 string type = j["type"].string_value(); 143 rr.type = VampJson::getRequestResponseType(j);
160 rr.type = RequestOrResponse::typeForName(type); 144
161 145 if (rr.type == RRType::Load) {
162 if (rr.type == RequestOrResponse::Load) {
163 rr.loadRequest = VampJson::toVampRequest_Load(j); 146 rr.loadRequest = VampJson::toVampRequest_Load(j);
164 147
165 } else if (rr.type == RequestOrResponse::Configure) { 148 } else if (rr.type == RRType::Configure) {
166 rr.configurationRequest = VampJson::toVampRequest_Configure(j, rr.mapper); 149 rr.configurationRequest = VampJson::toVampRequest_Configure(j, rr.mapper);
167 150
168 } else if (rr.type == RequestOrResponse::Process) { 151 } else if (rr.type == RRType::Process) {
169 rr.processRequest = VampJson::toVampRequest_Process(j, rr.mapper); 152 rr.processRequest = VampJson::toVampRequest_Process(j, rr.mapper);
170 153
171 } else if (rr.type == RequestOrResponse::Finish) { 154 } else if (rr.type == RRType::Finish) {
172 rr.finishPlugin = VampJson::toVampRequest_Finish(j, rr.mapper); 155 rr.finishPlugin = VampJson::toVampRequest_Finish(j, rr.mapper);
173 } 156 }
174 157
175 return rr; 158 return rr;
176 } 159 }
178 void 161 void
179 writeRequestJson(RequestOrResponse &rr) 162 writeRequestJson(RequestOrResponse &rr)
180 { 163 {
181 Json j; 164 Json j;
182 165
183 if (rr.type == RequestOrResponse::List) { 166 if (rr.type == RRType::List) {
184 j = VampJson::fromVampRequest_List(); 167 j = VampJson::fromVampRequest_List();
185 168
186 } else if (rr.type == RequestOrResponse::Load) { 169 } else if (rr.type == RRType::Load) {
187 j = VampJson::fromVampRequest_Load(rr.loadRequest); 170 j = VampJson::fromVampRequest_Load(rr.loadRequest);
188 171
189 } else if (rr.type == RequestOrResponse::Configure) { 172 } else if (rr.type == RRType::Configure) {
190 j = VampJson::fromVampRequest_Configure(rr.configurationRequest, rr.mapper); 173 j = VampJson::fromVampRequest_Configure(rr.configurationRequest, rr.mapper);
191 174
192 } else if (rr.type == RequestOrResponse::Process) { 175 } else if (rr.type == RRType::Process) {
193 j = VampJson::fromVampRequest_Process(rr.processRequest, rr.mapper); 176 j = VampJson::fromVampRequest_Process(rr.processRequest, rr.mapper);
194 177
195 } else if (rr.type == RequestOrResponse::Finish) { 178 } else if (rr.type == RRType::Finish) {
196 j = VampJson::fromVampRequest_Finish(rr.finishPlugin, rr.mapper); 179 j = VampJson::fromVampRequest_Finish(rr.finishPlugin, rr.mapper);
197 } 180 }
198 181
199 cout << j.dump() << endl; 182 cout << j.dump() << endl;
200 } 183 }
205 RequestOrResponse rr; 188 RequestOrResponse rr;
206 rr.direction = RequestOrResponse::Response; 189 rr.direction = RequestOrResponse::Response;
207 190
208 string input; 191 string input;
209 if (!getline(cin, input)) { 192 if (!getline(cin, input)) {
210 rr.type = RequestOrResponse::Eof; 193 rr.type = RRType::NotValid;
211 return rr; 194 return rr;
212 } 195 }
213 196
214 Json j = convertResponseJson(input); 197 Json j = convertResponseJson(input);
215 string type = j["type"].string_value(); 198 rr.type = VampJson::getRequestResponseType(j);
216 rr.type = RequestOrResponse::typeForName(type); 199
217 200 if (rr.type == RRType::List) {
218 if (rr.type == RequestOrResponse::List) {
219 rr.listResponse = VampJson::toVampResponse_List(j); 201 rr.listResponse = VampJson::toVampResponse_List(j);
220 202
221 } else if (rr.type == RequestOrResponse::Load) { 203 } else if (rr.type == RRType::Load) {
222 rr.loadResponse = VampJson::toVampResponse_Load(j, rr.mapper); 204 rr.loadResponse = VampJson::toVampResponse_Load(j, rr.mapper);
223 205
224 } else if (rr.type == RequestOrResponse::Configure) { 206 } else if (rr.type == RRType::Configure) {
225 rr.configurationResponse = VampJson::toVampResponse_Configure(j); 207 rr.configurationResponse = VampJson::toVampResponse_Configure(j);
226 208
227 } else if (rr.type == RequestOrResponse::Process) { 209 } else if (rr.type == RRType::Process) {
228 rr.processResponse = VampJson::toVampResponse_Process(j); 210 rr.processResponse = VampJson::toVampResponse_Process(j);
229 211
230 } else if (rr.type == RequestOrResponse::Finish) { 212 } else if (rr.type == RRType::Finish) {
231 rr.finishResponse = VampJson::toVampResponse_Finish(j); 213 rr.finishResponse = VampJson::toVampResponse_Finish(j);
232 } 214 }
233 215
234 return rr; 216 return rr;
235 } 217 }
237 void 219 void
238 writeResponseJson(RequestOrResponse &rr) 220 writeResponseJson(RequestOrResponse &rr)
239 { 221 {
240 Json j; 222 Json j;
241 223
242 if (rr.type == RequestOrResponse::List) { 224 if (rr.type == RRType::List) {
243 j = VampJson::fromVampResponse_List("", rr.listResponse); 225 j = VampJson::fromVampResponse_List("", rr.listResponse);
244 226
245 } else if (rr.type == RequestOrResponse::Load) { 227 } else if (rr.type == RRType::Load) {
246 j = VampJson::fromVampResponse_Load(rr.loadResponse, rr.mapper); 228 j = VampJson::fromVampResponse_Load(rr.loadResponse, rr.mapper);
247 } 229 }
230
231 //!!!
248 232
249 cout << j.dump() << endl; 233 cout << j.dump() << endl;
250 } 234 }
251 235
252 RequestOrResponse 236 RequestOrResponse
320 while (true) { 304 while (true) {
321 305
322 try { 306 try {
323 307
324 RequestOrResponse rr = readInput(informat, direction); 308 RequestOrResponse rr = readInput(informat, direction);
325 if (rr.type == RequestOrResponse::Eof) break; 309 if (rr.type == RRType::NotValid) break;
326 writeOutput(outformat, rr); 310 writeOutput(outformat, rr);
327 311
328 } catch (std::exception &e) { 312 } catch (std::exception &e) {
329 cerr << "Error: " << e.what() << endl; 313 cerr << "Error: " << e.what() << endl;
330 exit(1); 314 exit(1);