10#ifndef TEUCHOS_SIMPLE_OBJECT_DB_HPP
11#define TEUCHOS_SIMPLE_OBJECT_DB_HPP
15#include "Teuchos_ConstNonconstObjectContainer.hpp"
165 void validateIndex(
const int index)
const;
170 void removeObjImpl(
const int index);
196 return tableOfObjects_.size();
203 return freedIndices_.size();
210 return tableSize() - numFreeIndexes();
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);
268 validateIndex(index);
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();
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.
friend void swap(Array< T2 > &a1, Array< T2 > &a2)
Null reference error exception class.
Smart reference counting pointer class for automatic garbage collection.
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.