262 |
264 |
263 }; |
265 }; |
264 |
266 |
265 class ASN1ContentHandlerProxy : public ASN1ContentHandler { |
267 class ASN1ContentHandlerProxy : public ASN1ContentHandler { |
266 private: |
268 private: |
267 std::vector<std::shared_ptr<ASN1ContentHandler>> handlers; |
269 ProxyVector<ASN1ContentHandler> handlers; |
268 public: |
270 public: |
269 |
271 |
270 void addHandler(std::shared_ptr<ASN1ContentHandler> handler) { |
272 void addHandler(std::shared_ptr<ASN1ContentHandler> handler) { |
271 handlers.push_back(handler); |
273 handlers.push_back(handler); |
272 } |
274 } |
273 |
275 |
274 #define handler for (auto ___h : handlers) ___h |
|
275 |
|
276 void writeStreamStart() override { |
276 void writeStreamStart() override { |
277 handler->writeStreamStart(); |
277 handlers.forward(&ASN1ContentHandler::writeStreamStart); |
278 } |
278 } |
279 |
279 |
280 void writeStreamEnd() override { |
280 void writeStreamEnd() override { |
281 handler->writeStreamEnd(); |
281 handlers.forward(&ASN1ContentHandler::writeStreamEnd); |
282 } |
282 } |
283 |
283 |
284 void writeCollectionStart(CollectionType type) override { |
284 void writeCollectionStart(CollectionType type) override { |
285 handler->writeCollectionStart(type); |
285 handlers.forward(&ASN1ContentHandler::writeCollectionStart, type); |
286 } |
286 } |
287 |
287 |
288 void writeCollectionEnd() override { |
288 void writeCollectionEnd() override { |
289 handler->writeCollectionEnd(); |
289 handlers.forward(&ASN1ContentHandler::writeCollectionEnd); |
290 } |
290 } |
291 |
291 |
292 void writeBoolean(bool value) override { |
292 void writeBoolean(bool value) override { |
293 handler->writeBoolean(value); |
293 handlers.forward(&ASN1ContentHandler::writeBoolean, value); |
294 } |
294 } |
295 |
295 |
296 void writeNull() override { |
296 void writeNull() override { |
297 handler->writeNull(); |
297 handlers.forward(&ASN1ContentHandler::writeNull); |
298 } |
298 } |
299 |
299 |
300 void writeInteger(Integer value) override { |
300 void writeInteger(Integer value) override { |
301 handler->writeInteger(value); |
301 handlers.forward(&ASN1ContentHandler::writeInteger, value); |
302 } |
302 } |
303 |
303 |
304 void writeTextString(StringType type, std::string value) override { |
304 void writeTextString(StringType type, std::string value) override { |
305 handler->writeTextString(type, value); |
305 handlers.forward(&ASN1ContentHandler::writeTextString, type, value); |
306 } |
306 } |
307 |
307 |
308 void writeOctetString(std::string value) override { |
308 void writeOctetString(std::string value) override { |
309 handler->writeOctetString(value); |
309 handlers.forward(&ASN1ContentHandler::writeOctetString, value); |
310 } |
310 } |
311 |
311 |
312 void writeBitString(std::vector<bool> value) override { |
312 void writeBitString(std::vector<bool> value) override { |
313 handler->writeBitString(value); |
313 handlers.forward(&ASN1ContentHandler::writeBitString, value); |
314 } |
314 } |
315 |
315 |
316 void writeOID(ObjectIdentifier value) override { |
316 void writeOID(ObjectIdentifier value) override { |
317 handler->writeOID(value); |
317 handlers.forward(&ASN1ContentHandler::writeOID, value); |
318 } |
318 } |
319 |
319 |
320 void writeDateTime(DateTimeType type, DateTime value) override { |
320 void writeDateTime(DateTimeType type, DateTime value) override { |
321 handler->writeDateTime(type, value); |
321 handlers.forward(&ASN1ContentHandler::writeDateTime, type, value); |
322 } |
322 } |
323 |
|
324 #undef handler |
|
325 |
323 |
326 }; |
324 }; |
327 |
325 |
328 |
326 |
329 } |
327 } |