Teuchos Package Browser (Single Doxygen Collection)
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
core
src
Teuchos_SimpleObjectTable.hpp
Go to the documentation of this file.
1
// @HEADER
2
// ***********************************************************************
3
//
4
// Teuchos: Common Tools Package
5
// Copyright (2004) Sandia Corporation
6
//
7
// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8
// license for use of this work by or on behalf of the U.S. Government.
9
//
10
// Redistribution and use in source and binary forms, with or without
11
// modification, are permitted provided that the following conditions are
12
// met:
13
//
14
// 1. Redistributions of source code must retain the above copyright
15
// notice, this list of conditions and the following disclaimer.
16
//
17
// 2. Redistributions in binary form must reproduce the above copyright
18
// notice, this list of conditions and the following disclaimer in the
19
// documentation and/or other materials provided with the distribution.
20
//
21
// 3. Neither the name of the Corporation nor the names of the
22
// contributors may be used to endorse or promote products derived from
23
// this software without specific prior written permission.
24
//
25
// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
//
37
// Questions? Contact Michael A. Heroux (maherou@sandia.gov)
38
//
39
// ***********************************************************************
40
// @HEADER
41
42
#include "
Teuchos_Array.hpp
"
43
#include "
Teuchos_RCP.hpp
"
44
45
#ifndef TEUCHOS_SIMPLEOBJECTTABLE_HPP
46
#define TEUCHOS_SIMPLEOBJECTTABLE_HPP
47
51
55
56
namespace
Teuchos
57
{
58
59
template
<
class
T>
60
class
SimpleObjectTable
61
{
62
public
:
63
64
SimpleObjectTable
();
65
66
~SimpleObjectTable
();
67
68
int
storeRCP
(
const
RCP<T>
& robj);
69
70
int
storeNew
(T* obj,
bool
owned =
true
);
71
72
template
<
class
TOld>
73
int
storeCastedRCP
(
const
RCP<TOld>
& robj_old);
74
75
int
removeRCP
(
int
&index);
76
77
const
RCP<T>
getRCP
(
int
index);
78
79
void
purge
();
80
81
private
:
82
83
Array< RCP<T>
>
tableOfObjects
;
84
85
Array< int >
freedIndices
;
86
87
};
88
89
template
<
class
T>
90
SimpleObjectTable<T>::SimpleObjectTable
()
91
{
92
93
}
94
95
template
<
class
T>
96
SimpleObjectTable<T>::~SimpleObjectTable
()
97
{
98
purge
();
99
}
100
101
template
<
class
T>
102
int
SimpleObjectTable<T>::storeRCP
(
const
RCP<T>
& robj)
103
{
104
robj.
assert_not_null
();
105
106
int
index = -1;
107
108
if
(
freedIndices
.size() != 0) {
109
index =
freedIndices
.back();
110
freedIndices
.pop_back();
111
tableOfObjects
[index] = robj;
112
}
else
{
113
tableOfObjects
.push_back(robj);
114
index =
tableOfObjects
.size() - 1;
115
}
116
117
return
index;
118
}
119
120
template
<
class
T>
121
int
SimpleObjectTable<T>::storeNew
(T* obj,
bool
owned)
122
{
123
return
storeRCP
(
rcp
(obj, owned));
124
}
125
126
template
<
class
T>
127
template
<
class
TOld>
128
int
SimpleObjectTable<T>::storeCastedRCP
(
const
RCP<TOld>
& robj_old)
129
{
130
return
storeRCP
(
rcp_dynamic_cast<T>
(robj_old,
true
));
131
}
132
133
template
<
class
T>
134
int
SimpleObjectTable<T>::removeRCP
(
int
&index)
135
{
136
if
(
tableOfObjects
[index] ==
Teuchos::null
) {
137
throw
RangeError
(
"Item has already been deleted from SimpleObjectTable."
);
138
}
139
140
int
cnt =
tableOfObjects
[index].strong_count();
141
142
tableOfObjects
[index] =
Teuchos::null
;
143
freedIndices
.push_back(index);
144
index = -1;
145
146
return
(cnt-1);
147
}
148
149
template
<
class
T>
150
const
RCP<T>
SimpleObjectTable<T>::getRCP
(
int
index)
151
{
152
if
(
tableOfObjects
[index] ==
Teuchos::null
) {
153
throw
RangeError
(
"Item has already been deleted from SimpleObjectTable."
);
154
}
155
156
return
tableOfObjects
[index];
157
}
158
159
template
<
class
T>
160
void
SimpleObjectTable<T>::purge
()
161
{
162
int
ocnt =
tableOfObjects
.size();
163
for
(
int
i=0; i<ocnt; i++) {
164
tableOfObjects
[i] =
Teuchos::null
;
165
}
166
167
if
(
tableOfObjects
.size() > 0)
168
tableOfObjects
.erase(
tableOfObjects
.begin(),
tableOfObjects
.end());
169
if
(
freedIndices
.size() > 0)
170
freedIndices
.erase(
freedIndices
.begin(),
freedIndices
.end());
171
}
172
173
}
// end namespace Teuchos
174
175
#endif
176
Teuchos_Array.hpp
Templated array class derived from the STL std::vector.
Teuchos_RCP.hpp
Reference-counted pointer class and non-member templated function implementations.
Teuchos::Array
Replacement for std::vector that is compatible with the Teuchos Memory Management classes.
Definition
Teuchos_Array.hpp:195
Teuchos::RCP
Smart reference counting pointer class for automatic garbage collection.
Definition
Teuchos_RCPDecl.hpp:429
Teuchos::RCP::rcp_dynamic_cast
RCP< T2 > rcp_dynamic_cast(const RCP< T1 > &p1, bool throw_on_fail=false)
Dynamic cast of underlying RCP type from T1* to T2*.
Teuchos::RCP::assert_not_null
const RCP< T > & assert_not_null() const
Throws NullReferenceError if this->get()==NULL, otherwise returns reference to *this.
Definition
Teuchos_RCP.hpp:570
Teuchos::RangeError
Range error exception class.
Definition
Teuchos_Exceptions.hpp:94
Teuchos::SimpleObjectTable::getRCP
const RCP< T > getRCP(int index)
Definition
Teuchos_SimpleObjectTable.hpp:150
Teuchos::SimpleObjectTable::tableOfObjects
Array< RCP< T > > tableOfObjects
Definition
Teuchos_SimpleObjectTable.hpp:83
Teuchos::SimpleObjectTable::removeRCP
int removeRCP(int &index)
Definition
Teuchos_SimpleObjectTable.hpp:134
Teuchos::SimpleObjectTable::freedIndices
Array< int > freedIndices
Definition
Teuchos_SimpleObjectTable.hpp:85
Teuchos::SimpleObjectTable::storeRCP
int storeRCP(const RCP< T > &robj)
Definition
Teuchos_SimpleObjectTable.hpp:102
Teuchos::SimpleObjectTable::purge
void purge()
Definition
Teuchos_SimpleObjectTable.hpp:160
Teuchos::SimpleObjectTable::storeNew
int storeNew(T *obj, bool owned=true)
Definition
Teuchos_SimpleObjectTable.hpp:121
Teuchos::SimpleObjectTable::SimpleObjectTable
SimpleObjectTable()
Definition
Teuchos_SimpleObjectTable.hpp:90
Teuchos::SimpleObjectTable::storeCastedRCP
int storeCastedRCP(const RCP< TOld > &robj_old)
Definition
Teuchos_SimpleObjectTable.hpp:128
Teuchos::SimpleObjectTable::~SimpleObjectTable
~SimpleObjectTable()
Definition
Teuchos_SimpleObjectTable.hpp:96
Teuchos
Definition
Teuchos_AbstractFactory.hpp:47
Teuchos::rcp
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Deprecated.
Definition
Teuchos_RCPDecl.hpp:1266
Teuchos::null
@ null
Definition
Teuchos_ENull.hpp:54
Generated by
1.17.0