1 /**
2 * Inkscape::Whiteboard::KeyNodeTable - structure for lookup of values from keys
3 * and vice versa
4 *
5 * Authors:
6 * Bob Jamison
7 *
8 * Copyright (c) 2005 Authors
9 */
10 #include "keynode.h"
13 namespace Inkscape
14 {
15 namespace Whiteboard
16 {
20 void KeyNodeTable::clear()
21 {
22 items.clear();
23 }
25 void KeyNodeTable::append(const KeyNodeTable &other)
26 {
27 for (unsigned int i = 0; i<other.size() ; i++)
28 {
29 KeyNodePair pair = other.item(i);
30 put(pair);
31 }
32 }
34 void KeyNodeTable::put(const KeyNodePair &pair)
35 {
36 put(pair.key, pair.node);
37 }
39 void KeyNodeTable::put(const Glib::ustring &key, const XML::Node *node)
40 {
41 //delete existing
42 std::vector<KeyNodePair>::iterator iter;
43 for (iter = items.begin() ; iter != items.end() ; )
44 {
45 if (key == iter->key || node == iter->node)
46 iter = items.erase(iter);
47 else
48 iter++;
49 }
51 //add new
52 KeyNodePair pair(key, node);
53 items.push_back(pair);
54 }
56 XML::Node * KeyNodeTable::get(const Glib::ustring &key) const
57 {
58 std::vector<KeyNodePair>::const_iterator iter;
59 for (iter = items.begin() ; iter != items.end() ; iter++)
60 {
61 if (key == iter->key)
62 return iter->node;
63 }
64 return NULL;
65 }
68 void KeyNodeTable::remove(const Glib::ustring &key)
69 {
70 std::vector<KeyNodePair>::iterator iter;
71 for (iter = items.begin() ; iter != items.end() ; )
72 {
73 if (key == iter->key)
74 iter = items.erase(iter);
75 else
76 iter++;
77 }
78 }
81 Glib::ustring KeyNodeTable::get(XML::Node *node) const
82 {
83 std::vector<KeyNodePair>::const_iterator iter;
84 for (iter = items.begin() ; iter != items.end() ; iter++)
85 {
86 if (node == iter->node)
87 return iter->key;
88 }
89 return "";
90 }
93 void KeyNodeTable::remove(XML::Node *node)
94 {
95 std::vector<KeyNodePair>::iterator iter;
96 for (iter = items.begin() ; iter != items.end() ; )
97 {
98 if (node == iter->node)
99 iter = items.erase(iter);
100 else
101 iter++;
102 }
103 }
105 unsigned int KeyNodeTable::size() const
106 {
107 return items.size();
108 }
111 KeyNodePair KeyNodeTable::item(unsigned int index) const
112 {
113 if (index>=items.size())
114 {
115 KeyNodePair pair("", NULL);
116 return pair;
117 }
118 return items[index];
119 }
123 } // namespace Whiteboard
125 } // namespace Inkscape
126 //#########################################################################
127 //# E N D O F F I L E
128 //#########################################################################