From 24fe4bcb703c1d12af0f99931ac35347d076c8c0 Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Tue, 6 Jan 2009 06:18:13 +0100 Subject: [PATCH] separate and hide away implementation part into common/interfaceproxy.cpp --- src/common/interfaceproxy.cpp | 99 ++++++++++++++++++++++++++++++++++ src/include/interfaceproxy.hpp | 98 --------------------------------- 2 files changed, 99 insertions(+), 98 deletions(-) diff --git a/src/common/interfaceproxy.cpp b/src/common/interfaceproxy.cpp index e486e3f60..0aff8f5cd 100644 --- a/src/common/interfaceproxy.cpp +++ b/src/common/interfaceproxy.cpp @@ -84,3 +84,102 @@ namespace gui { } // namespace gui + +#include "common/instancehandle.hpp" + +namespace lumiera { + namespace facade { + + + 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 {}; + + 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 diff --git a/src/include/interfaceproxy.hpp b/src/include/interfaceproxy.hpp index 065fb1163..03c3b071a 100644 --- a/src/include/interfaceproxy.hpp +++ b/src/include/interfaceproxy.hpp @@ -120,102 +120,4 @@ namespace lumiera { } // namespace lumiera -#include "common/instancehandle.hpp" - -namespace lumiera { - namespace facade { - - - 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 {}; - - 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