template for engine registry; refs #11

master
Marc Wäckerlin 14 years ago
parent 95efe61822
commit 1db5a9ab69
  1. 2
      doc/examples/openssl-engine-demo.cxx
  2. 18
      src/openssl-engine.hxx

@ -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;
}; };
//@} //@}

Loading…
Cancel
Save