summaryrefslogtreecommitdiffstats
path: root/src/jabber_whiteboard/keynode.cpp
blob: d9af43f637244fc704ec6b4afe90d1b7059ab0a2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
/**
 * Inkscape::Whiteboard::KeyNodeTable - structure for lookup of values from keys
 * and vice versa
 *
 * Authors:
 * Bob Jamison
 *
 * Copyright (c) 2005 Authors
 */
#include "keynode.h"


namespace Inkscape
{
namespace Whiteboard
{



void KeyNodeTable::clear()
{
    items.clear();
}

void KeyNodeTable::append(const KeyNodeTable &other)
{
    for (unsigned int i = 0; i<other.size() ; i++)
        {
        KeyNodePair pair = other.item(i);
        put(pair);
        }
}

void KeyNodeTable::put(const KeyNodePair &pair)
{
    put(pair.key, pair.node);
}

void KeyNodeTable::put(const Glib::ustring &key, const XML::Node *node)
{
    //delete existing
    std::vector<KeyNodePair>::iterator iter;
    for (iter = items.begin() ; iter != items.end() ; )
        {
        if (key == iter->key || node == iter->node)
            iter = items.erase(iter);
        else
            iter++;
        }
        
    //add new
    KeyNodePair pair(key, node);
    items.push_back(pair);
}

XML::Node * KeyNodeTable::get(const Glib::ustring &key) const
{
    std::vector<KeyNodePair>::const_iterator iter;
    for (iter = items.begin() ; iter != items.end() ; iter++)
        {
        if (key == iter->key)
            return iter->node;
        }
    return NULL;
}


void KeyNodeTable::remove(const Glib::ustring &key)
{
    std::vector<KeyNodePair>::iterator iter;
    for (iter = items.begin() ; iter != items.end() ; )
        {
        if (key == iter->key)
            iter = items.erase(iter);
        else
            iter++;
        }
}


Glib::ustring KeyNodeTable::get(XML::Node *node) const
{
    std::vector<KeyNodePair>::const_iterator iter;
    for (iter = items.begin() ; iter != items.end() ; iter++)
        {
        if (node == iter->node)
            return iter->key;
        }
    return "";
}


void KeyNodeTable::remove(XML::Node *node)
{
    std::vector<KeyNodePair>::iterator iter;
    for (iter = items.begin() ; iter != items.end() ; )
        {
        if (node == iter->node)
            iter = items.erase(iter);
        else
            iter++;
        }
}

unsigned int KeyNodeTable::size() const
{
    return items.size();
}


KeyNodePair KeyNodeTable::item(unsigned int index) const
{
    if (index>=items.size())
        {
        KeyNodePair pair("", NULL);
        return pair;
        }
    return items[index];
}



} // namespace Whiteboard

} // namespace Inkscape
//#########################################################################
//# E N D    O F    F I L E
//#########################################################################