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**) { | ||||
|   { | ||||
|     openssl::RegisterEngine testEngine(new TestEngine); | ||||
|     openssl::RegisterEngine<> testEngine(new TestEngine); | ||||
|      | ||||
|     for (ENGINE* e(ENGINE_get_first()); e; e = ENGINE_get_next(e)) { | ||||
|       std::cout<<"Found Engine: "<<ENGINE_get_id(e)<<std::endl; | ||||
|   | ||||
| @@ -279,25 +279,31 @@ namespace openssl { | ||||
|  | ||||
|   //! Scoped Engine Registry | ||||
|   /*! Engine will be deregistered and freed at destruction */ | ||||
|   class RegisterEngine { | ||||
|   template <class ENGINE=Engine> class RegisterEngine { | ||||
|     public: | ||||
|       RegisterEngine(Engine* e): _e(e) { | ||||
|       RegisterEngine(ENGINE* e = 0): _e(e) { | ||||
|         if (_e) EngineMapper::add(_e); | ||||
|       } | ||||
|       ~RegisterEngine() { | ||||
|         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; | ||||
|       } | ||||
|        Engine* operator->() { | ||||
|        ENGINE* operator->() { | ||||
|         return _e; | ||||
|       } | ||||
|        Engine& operator*() { | ||||
|        ENGINE& operator*() { | ||||
|         return *_e; | ||||
|       } | ||||
|     private: | ||||
|       Engine* _e; | ||||
|       ENGINE* _e; | ||||
|   }; | ||||
|  | ||||
|   //@} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user