diff --git a/src/include/interfaceproxy.hpp b/src/include/interfaceproxy.hpp index 2b2396fe9..065fb1163 100644 --- a/src/include/interfaceproxy.hpp +++ b/src/include/interfaceproxy.hpp @@ -79,137 +79,143 @@ #include "lib/error.hpp" -#include namespace lumiera { - - using std::string; + namespace facade { - /********************************************************************* - * - */ - template - class FacadeAccessor - { - protected: - static FA* implProxy_; - - - public: - FA& - operator() () - { - if (implProxy_) - return *implProxy_; - else - throw error::State("Facade interface currently closed."); - } - }; + /********************************************************************* + * + */ + template + class Accessor + { + protected: + static FA* implProxy_; + + + public: + FA& + operator() () + { + if (implProxy_) + return *implProxy_; + else + throw error::State("Facade interface currently closed."); + } + }; + + template + void openProxy (IHA& iha); + + template + void closeProxy (IHA& iha); + + template + class Proxy; + + + } // namespace facade - template - void openProxy (IHA& iha); - - template - void closeProxy (IHA& iha); - - template - class Proxy; - -} +} // namespace lumiera #include "common/instancehandle.hpp" namespace lumiera { - - template - class Holder; - - template - class Holder > - : FacadeAccessor, - protected FA - { - protected: - typedef InstanceHandle IHandle; - typedef FacadeAccessor Access; - typedef Holder THolder; - typedef Proxy Proxy; - - static Proxy& open(IHandle& iha) - { - static char buff[sizeof(Proxy)]; - Proxy* p = new(buff) Proxy(iha); - Access::implProxy_ = p; - return *p; - } - - static void close() - { - if (!Access::implProxy_) return; - Proxy* p = static_cast (Access::implProxy_); - Access::implProxy_ = 0; - p->~Proxy(); - } - - - I& _i_; - - Holder (IHandle& iha) - : _i_(iha.get()) - { } - - }; + namespace facade { - template - FA* FacadeAccessor::implProxy_; + template + class Holder; + + template + class Holder > + : Accessor, + protected FA + { + protected: + typedef InstanceHandle IHandle; + typedef Holder THolder; + typedef Proxy Proxy; + typedef Accessor Access; + + static Proxy& open(IHandle& iha) + { + static char buff[sizeof(Proxy)]; + Proxy* p = new(buff) Proxy(iha); + Access::implProxy_ = p; + return *p; + } + + static void close() + { + if (!Access::implProxy_) return; + Proxy* p = static_cast (Access::implProxy_); + Access::implProxy_ = 0; + p->~Proxy(); + } + + + I& _i_; + + Holder (IHandle& iha) + : _i_(iha.get()) + { } + + }; + + + template + FA* Accessor::implProxy_; + + + struct XYZ + { + virtual ~XYZ(){} + + virtual int zoing(int i) =0; + }; + + struct II {}; - - struct XYZ - { - virtual ~XYZ(){} - - virtual int zoing(int i) =0; - }; - - struct II {}; - - typedef InstanceHandle IIXYZ; - - - template<> - class Proxy - : public Holder - { - //----Proxy-Implementation-of-XYZ-------- - - virtual int - zoing (int i) - { - return (rand() % i); - } - - - public: - Proxy (IHandle iha) : THolder(iha) {} - }; - - - template - void - openProxy (IHA& iha) - { - Proxy::open(iha); - } - - template - void - closeProxy (IHA& iha) - { - Proxy::close(); - } + typedef InstanceHandle IIXYZ; + + + template<> + class Proxy + : public Holder + { + //----Proxy-Implementation-of-XYZ-------- + + virtual int + zoing (int i) + { + return (rand() % i); + } + + + public: + Proxy (IHandle iha) : THolder(iha) {} + }; + + + template + void + openProxy (IHA& iha) + { + Proxy::open(iha); + } + + template + void + closeProxy (IHA& iha) + { + Proxy::close(); + } + + + } // namespace facade } // namespace lumiera #endif