src/lib/ASN1ContentHandler.h
branchv_0
changeset 24 114810ee2386
parent 23 8941a679299f
child 25 ba79cebde109
equal deleted inserted replaced
23:8941a679299f 24:114810ee2386
    19 #include <memory>
    19 #include <memory>
    20 #include <vector>
    20 #include <vector>
    21 #include <sstream>
    21 #include <sstream>
    22 #include <iomanip>
    22 #include <iomanip>
    23 #include <cmath>
    23 #include <cmath>
       
    24 
       
    25 #include "ProxyVector.h"
    24 
    26 
    25 namespace relpipe {
    27 namespace relpipe {
    26 namespace in {
    28 namespace in {
    27 namespace asn1 {
    29 namespace asn1 {
    28 namespace lib {
    30 namespace lib {
   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 }