File: VolumesContainer.cpp

package info (click to toggle)
drbd-utils 9.5.0-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 5,388 kB
  • sloc: ansic: 43,698; xml: 15,968; cpp: 7,783; sh: 3,699; makefile: 1,353; perl: 353
file content (51 lines) | stat: -rw-r--r-- 1,324 bytes parent folder | download
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
#include <VolumesContainer.h>
#include <comparators.h>

// @throws std::bad_alloc
VolumesContainer::VolumesContainer():
    volume_list(new VolumesMap(&comparators::compare_uint16))
{
}

VolumesContainer::~VolumesContainer() noexcept
{
    VolumesMap::NodesIterator dtor_iter(*volume_list);
    while (dtor_iter.has_next())
    {
        VolumesMap::Node* node = dtor_iter.next();
        delete node->get_key();
        delete node->get_value();
    }
    volume_list->clear();
}

// @throws std::bad_alloc, dsaext::DuplicateInsertException
void VolumesContainer::add_volume(DrbdVolume* volume)
{
    std::unique_ptr<uint16_t> volume_key(new uint16_t);
    *(volume_key.get()) = volume->get_volume_nr();
    volume_list->insert(volume_key.get(), volume);
    static_cast<void> (volume_key.release());
}

void VolumesContainer::remove_volume(uint16_t volume_nr)
{
    VolumesMap::Node* node = volume_list->get_node(&volume_nr);
    if (node != nullptr)
    {
        delete node->get_key();
        delete node->get_value();
        volume_list->remove_node(node);
    }
}

DrbdVolume* VolumesContainer::get_volume(uint16_t volume_nr)
{
    DrbdVolume* volume = volume_list->get(&volume_nr);
    return volume;
}

VolumesContainer::VolumesIterator VolumesContainer::volumes_iterator()
{
    return VolumesIterator(*this);
}