template for engine registry; refs #11
This commit is contained in:
		| @@ -25,7 +25,7 @@ class TestEngine: virtual public openssl::Engine { | |||||||
|  |  | ||||||
| int main(int, char**) { | int main(int, char**) { | ||||||
|   { |   { | ||||||
|     openssl::RegisterEngine testEngine(new TestEngine); |     openssl::RegisterEngine<> testEngine(new TestEngine); | ||||||
|      |      | ||||||
|     for (ENGINE* e(ENGINE_get_first()); e; e = ENGINE_get_next(e)) { |     for (ENGINE* e(ENGINE_get_first()); e; e = ENGINE_get_next(e)) { | ||||||
|       std::cout<<"Found Engine: "<<ENGINE_get_id(e)<<std::endl; |       std::cout<<"Found Engine: "<<ENGINE_get_id(e)<<std::endl; | ||||||
|   | |||||||
| @@ -279,25 +279,31 @@ namespace openssl { | |||||||
|  |  | ||||||
|   //! Scoped Engine Registry |   //! Scoped Engine Registry | ||||||
|   /*! Engine will be deregistered and freed at destruction */ |   /*! Engine will be deregistered and freed at destruction */ | ||||||
|   class RegisterEngine { |   template <class ENGINE=Engine> class RegisterEngine { | ||||||
|     public: |     public: | ||||||
|       RegisterEngine(Engine* e): _e(e) { |       RegisterEngine(ENGINE* e = 0): _e(e) { | ||||||
|         if (_e) EngineMapper::add(_e); |         if (_e) EngineMapper::add(_e); | ||||||
|       } |       } | ||||||
|       ~RegisterEngine() { |       ~RegisterEngine() { | ||||||
|         if (_e) EngineMapper::remove(_e); |         if (_e) EngineMapper::remove(_e); | ||||||
|       } |       } | ||||||
|       operator Engine*() { |       RegisterEngine& operator=(ENGINE* e) { | ||||||
|  |         if (_e) EngineMapper::remove(_e); | ||||||
|  |         _e = e; | ||||||
|  |         if (_e) EngineMapper::add(_e); | ||||||
|  |         return *this; | ||||||
|  |       } | ||||||
|  |       operator ENGINE*() { | ||||||
|         return _e; |         return _e; | ||||||
|       } |       } | ||||||
|        Engine* operator->() { |        ENGINE* operator->() { | ||||||
|         return _e; |         return _e; | ||||||
|       } |       } | ||||||
|        Engine& operator*() { |        ENGINE& operator*() { | ||||||
|         return *_e; |         return *_e; | ||||||
|       } |       } | ||||||
|     private: |     private: | ||||||
|       Engine* _e; |       ENGINE* _e; | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|   //@} |   //@} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user