21 #include <smart_ptr.h> 23 #include <polyconstr.h> 24 #include <exception.h> 26 #ifndef _libint2_src_bin_libint_iter_h_ 27 #define _libint2_src_bin_libint_iter_h_ 48 virtual unsigned int num_iter()
const =0;
50 virtual void init() =0;
54 virtual operator int()
const =0;
75 typedef typename T::iter_type iter_type;
76 typedef Tr<T> TPolicy;
77 typedef typename TPolicy::obj_stype tref;
78 typedef typename TPolicy::subobj_stype iref;
85 const iref& elem()
const;
87 cp_rettype pelem()
const;
90 unsigned int num_iter()
const;
100 vector<iref> subobj_;
109 template <
class X>
void init_subobj();
110 template <
class X>
void delete_subobj();
112 void delete_subobj();
115 template <
typename X,
bool return_smart_ptr>
118 template <
typename X>
119 struct PElemImpl<X,true> {
120 static cp_rettype pelem(
const iref& elem) {
122 return *(elem_cast.get());
125 template <
typename X>
126 struct PElemImpl<X,false> {
127 static cp_rettype pelem(
const iref& elem) {
134 template <
class T,
template <
class>
class P>
136 obj_(obj), subobj_(0), iter_(0)
138 #ifdef ALLOW_PARTIALLY_SPECIALIZED_NESTED_TEMPLATES 145 template <
class T,
template <
class>
class P>
148 #ifdef ALLOW_PARTIALLY_SPECIALIZED_NESTED_TEMPLATES 155 template <
class T,
template <
class>
class P>
159 return subobj_.size();
162 template <
class T,
template <
class>
class P>
163 const typename SubIteratorBase<T,P>::iref&
166 return subobj_.at(iter_);
169 template <
class T,
template <
class>
class P>
173 return PElemImpl<iter_type,IsSafePtr<iref>::result>
::pelem(
elem());
177 template <
class T,
template <
class>
class P>
178 const SafePtr<ConstructablePolymorphically>
185 template <
class T,
template <
class>
class P>
192 template <
class T,
template <
class>
class P>
200 template <
class T,
template <
class>
class P>
203 return (iter_ <
num_iter()) ? 1 : 0;
206 template <
class T,
template <
class>
class P>
210 P<T>::init_subobj(obj_,subobj_);
213 template <
class T,
template <
class>
class P>
217 P<T>::dealloc_subobj(subobj_);
ConstructablePolymorphically is a base for all objects which can be constructed using a SafePtr to a ...
Definition: polyconstr.h:30
const ConstructablePolymorphically & cp_rettype
Return reference to ConstructablePolymorphically as object of this type.
Definition: iter.h:80
const iref & elem() const
Returns current element.
Definition: iter.h:164
Defaults definitions for various parameters assumed by Libint.
Definition: algebra.cc:23
cp_rettype pelem() const
Returns current element. Implements SubIterator's pelem().
Definition: iter.h:171
Definition: stdarray.h:18
void init()
Initializes the iterator.
Definition: iter.h:187
SubIteratorBase<T> provides a base class for a sub-iterator class for T.
Definition: iter.h:72
SubIterator & operator++()
Iterates to the next element. Only prefix form is provided.
Definition: iter.h:194
Iterator provides a base class for all object iterator classes.
Definition: iter.h:44
unsigned int num_iter() const
Returns a number of iterations (number of elements in a set over which to iterate).
Definition: iter.h:157