-
Notifications
You must be signed in to change notification settings - Fork 83
/
Copy pathattribute_set.cxx
126 lines (106 loc) · 2.83 KB
/
attribute_set.cxx
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
// This file is part of KWIVER, and is distributed under the
// OSI-approved BSD 3-Clause License. See top-level LICENSE file or
// https://github.com/Kitware/kwiver/blob/master/LICENSE for details.
/// \file
/// \brief Implementation of attribute_set class
#include "attribute_set.h"
#include <sstream>
namespace kwiver {
namespace vital {
// ----------------------------------------------------------------------------
attribute_set_exception::
attribute_set_exception( std::string const& str )
{
m_what = str;
}
attribute_set_exception::
~attribute_set_exception() noexcept
{ }
// ----------------------------------------------------------------------------
attribute_set::
attribute_set()
{ }
attribute_set::
~attribute_set()
{ }
// ----------------------------------------------------------------------------
attribute_set_sptr
attribute_set::
clone() const
{
auto new_obj = std::make_shared< attribute_set >();
auto it( this->m_attr_map.begin() );
const auto eit( this->m_attr_map.end() );
for ( ; it != eit; ++it)
{
new_obj->add( it->first, *it->second );
}
return new_obj;
}
// ----------------------------------------------------------------------------
void
attribute_set::
add( const std::string& name, const kwiver::vital::any& val )
{
#ifdef VITAL_STD_MAP_UNIQUE_PTR_ALLOWED
m_attr_map[name] = std::make_unique<kwiver::vital::any>(val);
#else
m_attr_map[name] = std::make_shared<kwiver::vital::any>(val);
#endif
}
// ----------------------------------------------------------------------------
bool attribute_set::
has( const std::string& name ) const
{
return m_attr_map.count( name ) > 0;
}
// ----------------------------------------------------------------------------
bool
attribute_set::
erase( const std::string& name )
{
return m_attr_map.erase(name) > 0;
}
// ----------------------------------------------------------------------------
attribute_set::const_iterator_t
attribute_set::
begin() const
{
return m_attr_map.begin();
}
// ----------------------------------------------------------------------------
attribute_set::const_iterator_t
attribute_set::
end() const
{
return m_attr_map.end();
}
// ----------------------------------------------------------------------------
size_t
attribute_set::
size() const
{
return m_attr_map.size();
}
// ----------------------------------------------------------------------------
bool
attribute_set::
empty() const
{
return m_attr_map.empty();
}
// ----------------------------------------------------------------------------
kwiver::vital::any
attribute_set::
data( const std::string& name ) const
{
auto ix = m_attr_map.find( name );
if ( ix == m_attr_map.end() )
{
std::stringstream str;
str << "Attribute name \"" << name << "\" is not in the set.";
VITAL_THROW( attribute_set_exception, str.str() );
}
return *(ix->second);
}
} } // end namespace