10#ifndef TEUCHOS_SIMPLE_OBJECT_DB_HPP
11#define TEUCHOS_SIMPLE_OBJECT_DB_HPP
15#include "Teuchos_ConstNonconstObjectContainer.hpp"
162 tableOfObjects_t tableOfObjects_;
163 freedIndices_t freedIndices_;
165 void validateIndex(
const int index)
const;
168 int storeObjectImpl(
const RCP<T2> &robj);
170 void removeObjImpl(
const int index);
196 return tableOfObjects_.size();
203 return freedIndices_.size();
217 return storeObjectImpl(obj);
224 return storeObjectImpl(obj);
239 validateIndex(index);
240 removeObjImpl(index);
247 validateIndex(index);
248 const RCP<T> obj = tableOfObjects_[index].getNonconstObj();
249 removeObjImpl(index);
257 validateIndex(index);
258 const RCP<const T> obj = tableOfObjects_[index].getConstObj();
259 removeObjImpl(index);
267 const int index_in = index;
268 validateIndex(index);
269 const int cnt = tableOfObjects_[index_in].count();
270 removeObjImpl(index_in);
279 validateIndex(index);
280 return tableOfObjects_[index].getNonconstObj();
287 validateIndex(index);
288 return tableOfObjects_[index].getConstObj();
295 validateIndex(index);
296 return tableOfObjects_[index].getNonconstObj().ptr();
303 validateIndex(index);
304 return tableOfObjects_[index].getConstObj().ptr();
312 tableOfObjects_t().swap(tableOfObjects_);
313 freedIndices_t().swap(freedIndices_);
321void SimpleObjectDB<T>::validateIndex(
const int index)
const
325 !(0 <= index && index <
as<int>(tableOfObjects_.size())),
327 "Error, the object index = " << index <<
" falls outside of the range"
328 <<
" of valid objects [0,"<<tableOfObjects_.size()<<
"]");
329 const RCP<const T> &obj = tableOfObjects_[index].getConstObj();
331 "Error, the object at index "<<index<<
" of type "
338int SimpleObjectDB<T>::storeObjectImpl(
const RCP<T2> & robj)
340 robj.assert_not_null();
344 if (freedIndices_.size() != 0) {
345 index = freedIndices_.back();
346 freedIndices_.pop_back();
347 tableOfObjects_[index].initialize(robj);
349 tableOfObjects_.push_back(robj);
350 index = tableOfObjects_.size() - 1;
358void SimpleObjectDB<T>::removeObjImpl(
const int index)
360 tableOfObjects_[index] = null;
361 freedIndices_.push_back(index);
Templated array class derived from the STL std::vector.
Definition of Teuchos::as, for conversions between types.
Replacement for std::vector that is compatible with the Teuchos Memory Management classes.
Null reference error exception class.
Simple wrapper class for raw pointers to single objects where no persisting relationship exists.
Smart reference counting pointer class for automatic garbage collection.
RCP< T2 > rcp_dynamic_cast(const RCP< T1 > &p1, bool throw_on_fail=false)
Dynamic cast of underlying RCP type from T1* to T2*.
Range error exception class.
Simple object object database.
int storeCastedNonconstObj(const RCP< TOld > &robj_old)
Performs an rcp_dynamic_cast<>() to store the obejct.
int removeRCP(int &index)
Remove an indexed object from the table.
RCP< const T > removeConstObj(const int index)
int storeNonconstObj(const RCP< T > &obj)
Store a non-const object.
void purge()
Clear out all storage.
RCP< T > removeNonconstObj(const int index)
void removeObj(const int index)
Remove a stored object without returning it.
SimpleObjectDB()
Construct an empty DB.
int storeConstObj(const RCP< const T > &obj)
Store a const object.
int numFreeIndexes() const
Return number of free indexes.
int tableSize() const
Return the current size of the table.
int numObjects() const
Return number of non-null stored objects.
Ptr< T > getNonconstObjPtr(const int index)
Get an object (nonconst semi-persisting association).
RCP< T > getNonconstObjRCP(const int index)
Get an object (nonconst persisting association).
RCP< const T > getConstObjRCP(const int index) const
Get an object (const persisting association).
Ptr< const T > getConstObjPtr(const int index) const
Get an object (const semi-persisting association).
static std::string name()
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Macro for throwing an exception with breakpointing to ease debugging.
bool is_null(const std::shared_ptr< T > &p)
Returns true if p.get()==NULL.
TypeTo as(const TypeFrom &t)
Convert from one value type to another.
The Teuchos namespace contains all of the classes, structs and enums used by Teuchos,...
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Deprecated.
RCP< SimpleObjectDB< T > > createSimpleObjectDB()
Nonmember constructor.