42#ifndef TEUCHOS_SIMPLE_OBJECT_DB_HPP
43#define TEUCHOS_SIMPLE_OBJECT_DB_HPP
47#include "Teuchos_ConstNonconstObjectContainer.hpp"
129 template <
class TOld>
197 void validateIndex(
const int index)
const;
202 void removeObjImpl(
const int index);
228 return tableOfObjects_.size();
235 return freedIndices_.size();
242 return tableSize() - numFreeIndexes();
249 return storeObjectImpl(obj);
256 return storeObjectImpl(obj);
271 validateIndex(index);
272 removeObjImpl(index);
279 validateIndex(index);
280 const RCP<T> obj = tableOfObjects_[index].getNonconstObj();
281 removeObjImpl(index);
289 validateIndex(index);
290 const RCP<const T> obj = tableOfObjects_[index].getConstObj();
291 removeObjImpl(index);
300 validateIndex(index);
311 validateIndex(index);
312 return tableOfObjects_[index].getNonconstObj();
319 validateIndex(index);
320 return tableOfObjects_[index].getConstObj();
327 validateIndex(index);
328 return tableOfObjects_[index].getNonconstObj().ptr();
335 validateIndex(index);
336 return tableOfObjects_[index].getConstObj().ptr();
357 !(0 <= index && index <
as<int>(tableOfObjects_.size())),
359 "Error, the object index = " << index <<
" falls outside of the range"
360 <<
" of valid objects [0,"<<tableOfObjects_.size()<<
"]");
361 const RCP<const T> &obj = tableOfObjects_[index].getConstObj();
363 "Error, the object at index "<<index<<
" of type "
370int SimpleObjectDB<T>::storeObjectImpl(
const RCP<T2> & robj)
372 robj.assert_not_null();
376 if (freedIndices_.size() != 0) {
377 index = freedIndices_.back();
378 freedIndices_.pop_back();
379 tableOfObjects_[index].initialize(
robj);
381 tableOfObjects_.push_back(
robj);
382 index = tableOfObjects_.size() - 1;
390void SimpleObjectDB<T>::removeObjImpl(
const int index)
392 tableOfObjects_[index] = null;
393 freedIndices_.push_back(index);
Templated array class derived from the STL std::vector.
Definition of Teuchos::as, for conversions between types.
friend void swap(Array< T2 > &a1, Array< T2 > &a2)
Null reference error exception class.
Smart reference counting pointer class for automatic garbage collection.
RCP(ENull null_arg=null)
Initialize RCP<T> to NULL.
bool is_null() const
Returns true if the underlying pointer is null.
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).
Default traits class that just returns typeid(T).name().
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Macro for throwing an exception with breakpointing to ease debugging.
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.