CASM  1.1.0
A Clusters Approach to Statistical Mechanics
CASM::DB::DatabaseIteratorBase< ValueType > Class Template Referenceabstract

#include <Database.hh>

+ Inheritance diagram for CASM::DB::DatabaseIteratorBase< ValueType >:

Detailed Description

template<typename ValueType>
class CASM::DB::DatabaseIteratorBase< ValueType >

Dereferencing DatabaseIteratorBase only provides const references, whether the underlying resource is persistent (Supercell) or temporary (other types). Changing database entries must be done via copy then insert, or update.

DatabaseIteratorBase should always be dereferenceable (except end or when default constructed), though the reference may be invalidated when a second DatabaseIteratorBase is dereferenced, dereferencing the first again should be valid (though it may require re-allocation):

DerivedDatabaseIterator A = ... get from DerivedDatabase ...;
const ValueType& A_ref1 = *A; // ok
A_ref1.method(); // ok
A->method(); // ok
DerivedDatabaseIterator B = ... get from DerivedDatabase ...;
const ValueType& B_ref = *B; // ok, but now A_ref1 may be invalidated
A_ref1.method(); // maybe not ok
A->method(); // ok
B->method(); // ok
const ValueType& A_ref2 = *A; // ok, but now B_ref may be invalidated
A_ref1.method(); // maybe not ok
A_ref2.method(); // ok
B_ref.method(); // maybe not ok
A->method(); // ok
B->method(); // ok
DoFSpecsType const & get(DoFKey const &key, BasisFunctionSpecs const &basis_function_specs)

Derived classes must implement private methods:

Definition at line 81 of file Database.hh.

Public Types

typedef ValueType value_type
 
typedef const value_typereference
 

Public Member Functions

 DatabaseIteratorBase ()
 
virtual ~DatabaseIteratorBase ()
 
virtual std::string name () const =0
 
std::unique_ptr< DatabaseIteratorBaseclone () const
 

Private Member Functions

virtual void increment ()=0
 
virtual reference dereference () const =0
 
virtual bool equal (const DatabaseIteratorBase< ValueType > &other) const =0
 
virtual DatabaseIteratorBase_clone () const =0
 

Private Attributes

friend DatabaseIterator< ValueType >
 

Member Typedef Documentation

◆ reference

template<typename ValueType >
typedef const value_type& CASM::DB::DatabaseIteratorBase< ValueType >::reference

Definition at line 86 of file Database.hh.

◆ value_type

template<typename ValueType >
typedef ValueType CASM::DB::DatabaseIteratorBase< ValueType >::value_type

Definition at line 85 of file Database.hh.

Constructor & Destructor Documentation

◆ DatabaseIteratorBase()

template<typename ValueType >
CASM::DB::DatabaseIteratorBase< ValueType >::DatabaseIteratorBase ( )
inline

Definition at line 88 of file Database.hh.

◆ ~DatabaseIteratorBase()

template<typename ValueType >
virtual CASM::DB::DatabaseIteratorBase< ValueType >::~DatabaseIteratorBase ( )
inlinevirtual

Definition at line 89 of file Database.hh.

Member Function Documentation

◆ _clone()

◆ clone()

template<typename ValueType >
std::unique_ptr<DatabaseIteratorBase> CASM::DB::DatabaseIteratorBase< ValueType >::clone ( ) const
inline

Definition at line 93 of file Database.hh.

◆ dereference()

template<typename ValueType >
virtual reference CASM::DB::DatabaseIteratorBase< ValueType >::dereference ( ) const
privatepure virtual

◆ equal()

template<typename ValueType >
virtual bool CASM::DB::DatabaseIteratorBase< ValueType >::equal ( const DatabaseIteratorBase< ValueType > &  other) const
privatepure virtual

◆ increment()

template<typename ValueType >
virtual void CASM::DB::DatabaseIteratorBase< ValueType >::increment ( )
privatepure virtual

◆ name()

template<typename ValueType >
virtual std::string CASM::DB::DatabaseIteratorBase< ValueType >::name ( ) const
pure virtual

Member Data Documentation

◆ DatabaseIterator< ValueType >

template<typename ValueType >
friend CASM::DB::DatabaseIteratorBase< ValueType >::DatabaseIterator< ValueType >
private

Definition at line 82 of file Database.hh.


The documentation for this class was generated from the following file: