node-tracker.h revision 535b1596de71acb960a629b0f34f0d2171a34348
/**
* 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
*/
#include "jabber_whiteboard/tracker-node.h"
#include "jabber_whiteboard/typedefs.h"
#include <bitset>
#include <cstring>
#include <map>
#include <glibmm.h>
/**
* std::less-like functor for C-style strings.
*/
{
{
}
};
// TODO: This is a pretty heinous mess of methods that accept
// both pointers and references -- a lot of it has to do with
// XML::Node& in the node observer and XML::Node* elsewhere,
// although some of it (like Glib::ustring const& vs.
// Glib::ustring const*) is completely mea culpa. When possible
// it'd be good to thin this class out.
/**
* XMLNodeTracker generates and watches unique IDs for XML::Nodes for use in
* document event serialization and deserialization.
*
* More specifically, it has three tasks:
* <ol>
* <li>Association XML::Nodes with string IDs, and vice versa.</li>
* <li>Facilitation of lookup of a string ID or XML::Node given the other key.</li>
* <li>Generation of new string IDs for XML::Nodes.</li>
* </ol>
*
* XML::Nodes are assigned an ID that follows one of two forms:
* <ol>
* <li>unsigned integer;user JID</li>
* </ol>
*
* Form 1 is used in user-to-user sessions; form 2 is used in chatroom sessions.
*/
/**
* Constructor.
*/
/**
* Constructor.
*
* \param sm The SessionManager with which an XMLNodeTracker instance is to be associated with.
*/
~XMLNodeTracker();
/**
* Insert a (key,node) pair into the tracker.
*
* \param key The key to associate with the node.
* \param node The node to associate with the key.
*/
/**
* Process a list of node actions to add and remove nodes from the tracker.
*
* \param actions The action list to process.
*/
/**
* Retrieve an XML::Node given a key.
*
* \param key Reference to a const string key.
* \return Pointer to an XML::Node, or NULL if no associated node could be found.
*/
/**
* Retrieve a string key given a reference to an XML::Node.
*
* \param node Reference to a const XML::Node.
* \return The associated string key, or an empty string if no associated key could be found.
*/
/**
* Remove an entry from the tracker based on key.
*
* \param The key of the entry to remove.
*/
/**
* Remove an entry from the tracker based on XML::Node.
*
* \param A reference to the XML::Node associated with the entry to remove.
*/
/**
* Return whether or not a (key,node) pair is being tracked, given a string key.
*
* \param The key associated with the pair to check.
* \return Whether or not the pair is being tracked.
*/
/**
* Return whether or not a (key,node) pair is being tracked, given a node.
*
* \param The node associated with the pair to check.
* \return Whether or not the pair is being tracked.
*/
/**
* Return whether or not a node identified by a given name is a special node.
*
* \see Inkscape::Whiteboard::specialnodekeys
* \see Inkscape::Whiteboard::specialnodenames
*
* \param The name associated with the node.
* \return Whether or not the node is a special node.
*/
/**
* Retrieve the key of a special node given the name of a special node.
*
* \see Inkscape::Whiteboard::specialnodekeys
* \see Inkscape::Whiteboard::specialnodenames
*
* \param The name associated with the node.
* \return The key of the special node.
*/
/**
* Returns whether or not the given node is the root node of the SPDocument associated
* with an XMLNodeTracker's SessionManager.
*
* \param Reference to an XML::Node to test.
* \return Whether or not the given node is the document root node.
*/
/**
* Generate a node key given a JID.
*
* \param The JID to use in the key.
* \return A node string key.
*/
/**
* Generate a node key given the JID specified in the SessionData structure associated
* with an XMLNodeTracker's SessionManager.
*
* \return A node string key.
*/
// TODO: remove debugging function
void dump();
void reset();
//common code called by constructors
void init();
void createSpecialNodeTables();
void _clear();
unsigned int _counter;
// Keys for special nodes
// noncopyable, nonassignable
XMLNodeTracker(XMLNodeTracker const&);
};
}
}
#endif
/*
Local Variables:
mode:c++
c-file-style:"stroustrup"
c-file-offsets:((innamespace . 0)(inline-open . 0))
indent-tabs-mode:nil
fill-column:99
End:
*/
// vim: filetype=c++:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :