summaryrefslogtreecommitdiffstats
path: root/src/jabber_whiteboard/keynode.cpp
blob: b338a91fe31dec552a4c07d7d93cc438592ad9b9 (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
129
130
131
132
133
/**
 * Inkscape::Whiteboard::KeyNodeTable - structure for lookup of values from keys
 * and vice versa
 *
 * Authors:
 * Bob Jamison
 *
 * Copyright (c) 2005 Authors
 */
#include "keynode.h"
#include "util/ucompose.hpp"

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];
}

Glib::ustring 
KeyNodeTable::generateKey(Glib::ustring jid)
{
    return String::ucompose("%1/%2",this->counter++,jid);
}


} // namespace Whiteboard

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