diff options
Diffstat (limited to 'src/jabber_whiteboard/tracker-node.h')
| -rw-r--r-- | src/jabber_whiteboard/tracker-node.h | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/src/jabber_whiteboard/tracker-node.h b/src/jabber_whiteboard/tracker-node.h new file mode 100644 index 000000000..bbaf527ce --- /dev/null +++ b/src/jabber_whiteboard/tracker-node.h @@ -0,0 +1,94 @@ +/** + * Whiteboard session manager + * XML node tracking facility + * + * Authors: + * David Yip <yipdw@rose-hulman.edu> + * + * Copyright (c) 2005 Authors + * + * Released under GNU GPL, read the file 'COPYING' for more information + */ + +#ifndef __WHITEBOARD_TRACKER_NODE_H__ +#define __WHITEBOARD_TRACKER_NODE_H__ + +#include "xml/node.h" + +#include "gc-managed.h" +#include "gc-finalized.h" + +#include <glibmm.h> +#include <bitset> + +namespace Inkscape { + +namespace Whiteboard { + +// set _size in TrackerNode private members if you add or delete +// any more listeners +enum ListenerType { + ATTR_CHANGED, + CHILD_ADDED, + CHILD_REMOVED, + CHILD_ORDER_CHANGED, + CONTENT_CHANGED +}; + +struct TrackerNode : public GC::Managed<> { +public: + TrackerNode(XML::Node const* n) : _node(n) + { + } + + ~TrackerNode() + { + } + + void lock(ListenerType listener) + { + if (listener < _size) { + this->_listener_locks.set(listener, true); + } + } + + void unlock(ListenerType listener) + { + if (listener < _size) { + this->_listener_locks.set(listener, false); + } + } + + bool isLocked(ListenerType listener) + { + return (this->_listener_locks[listener]); + } + + XML::Node const* _node; + +private: + // change this if any other flags are added + static unsigned short const _size = 5; + std::bitset< _size > _listener_locks; + + // noncopyable, nonassignable + TrackerNode(TrackerNode const&); + TrackerNode& operator=(TrackerNode const&); +}; + +} + +} + +#endif + +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 : |
