X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FMoof%2FDispatch.hh;h=e357f0263e65d33aac5ec81972f9437e22abf0a5;hp=031f77d0bc65507aee31bfdff50afd4d0f057050;hb=c78934a448d0126709fccec3d5a636b3baa87da4;hpb=a295f8def17036c8071b56e181364f99a377cae7 diff --git a/src/Moof/Dispatch.hh b/src/Moof/Dispatch.hh index 031f77d..e357f02 100644 --- a/src/Moof/Dispatch.hh +++ b/src/Moof/Dispatch.hh @@ -1,30 +1,13 @@ -/******************************************************************************* - - Copyright (c) 2009, Charles McGarvey - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*******************************************************************************/ +/*] Copyright (c) 2009-2010, Charles McGarvey [************************** +**] All rights reserved. +* +* vi:ts=4 sw=4 tw=75 +* +* Distributable under the terms and conditions of the 2-clause BSD license; +* see the file COPYING for a complete text of the license. +* +**************************************************************************/ #ifndef _MOOF_DISPATCH_HH_ #define _MOOF_DISPATCH_HH_ @@ -34,6 +17,7 @@ #include #include #include +#include namespace Mf { @@ -48,47 +32,40 @@ class Dispatch class Impl; boost::shared_ptr mImpl; - void removeHandler(unsigned id); + void removeTarget(unsigned id); -public: - - /** - * Interface for a notification class. - */ - - class Message - { - public: - virtual ~Message() {}; - }; +public: - class Handler + class Handle { public: - Handler() : - mDispatch(0), + Handle() : mId(0) {} - Handler(Impl* dispatch, unsigned id) : + Handle(boost::weak_ptr dispatch, unsigned id) : mDispatch(dispatch), mId(id) {} - Handler(const Handler& handler) : - mDispatch(handler.mDispatch), - mId(handler.mId) + Handle(const Handle& handle) : + mDispatch(handle.mDispatch), + mId(handle.mId) { - handler.mId = 0; + handle.mId = 0; } - ~Handler(); + ~Handle() + { + clear(); + } - Handler& operator = (const Handler& handler) + Handle& operator = (const Handle& handle) { - mDispatch = handler.mDispatch; - mId = handler.mId; - handler.mId = 0; + clear(); + mDispatch = handle.mDispatch; + mId = handle.mId; + handle.mId = 0; return *this; } @@ -96,24 +73,27 @@ public: { return mId; } + + void clear(); private: - Impl* mDispatch; - mutable unsigned mId; - + boost::weak_ptr mDispatch; + mutable unsigned mId; }; - typedef boost::function Function; + typedef boost::function Function; Dispatch(); - Handler addHandler(const std::string& event, const Function& callback); - Handler addHandler(const std::string& event, const Function& callback, - Handler handler); + Handle addTarget(const std::string& event, const Function& callback); + Handle addTarget(const std::string& event, const Function& callback, + Handle handle); + + void dispatch(const std::string& event); - void dispatch(const std::string& event, const Message* message = 0); + static Dispatch& global(); }; @@ -121,5 +101,3 @@ public: #endif // _MOOF_DISPATCH_HH_ -/** vim: set ts=4 sw=4 tw=80: *************************************************/ -