20 #ifndef TULIP_STLITERATOR_H 
   21 #define TULIP_STLITERATOR_H 
   24 #include <type_traits> 
   26 #include <tulip/Iterator.h> 
   27 #include <tulip/memorypool.h> 
   43 template <
typename T, 
typename ITERATOR>
 
   45   StlIterator(
const ITERATOR &startIt, 
const ITERATOR &endIt) : it(startIt), itEnd(endIt) {}
 
   59 template <
typename T, 
typename ITERATOR>
 
   60 struct MPStlIterator : 
public StlIterator<T, ITERATOR>,
 
   61                        public MemoryPool<MPStlIterator<T, ITERATOR>> {
 
   62   MPStlIterator(
const ITERATOR &startIt, 
const ITERATOR &endIt)
 
   63       : StlIterator<T, ITERATOR>(startIt, endIt) {}
 
   69 struct has_const_iterator {
 
   72   static char test(
typename C::const_iterator *);
 
   77   enum { value = 
sizeof(test<T>(0)) == 
sizeof(
char) };
 
   91 template <
typename Container>
 
   92 typename std::enable_if<
 
   93     has_const_iterator<Container>::value,
 
   94     StlIterator<typename Container::value_type, typename Container::const_iterator>
 
   96   return new MPStlIterator<typename Container::value_type, typename Container::const_iterator>(
 
   97       stlContainer.begin(), stlContainer.end());
 
  101 template <
typename KEY, 
typename VALUE>
 
  102 struct StlMapIterator : 
public Iterator<std::pair<KEY, VALUE>> {
 
  103   StlMapIterator(
typename std::map<KEY, VALUE>::const_iterator startIt,
 
  104                  typename std::map<KEY, VALUE>::const_iterator endIt)
 
  105       : it(startIt), itEnd(endIt) {}
 
  107   std::pair<KEY, VALUE> next() {
 
  108     std::pair<KEY, VALUE> tmp = *it;
 
  114     return (itEnd != it);
 
  118   typename std::map<KEY, VALUE>::const_iterator it, itEnd;
 
  121 template <
typename KEY, 
typename VALUE>
 
  123   StlMapKeyIterator(
typename std::map<KEY, VALUE>::const_iterator startIt,
 
  124                     typename std::map<KEY, VALUE>::const_iterator endIt)
 
  125       : it(startIt), itEnd(endIt) {}
 
  128     const KEY tmp = it->first;
 
  138   typename std::map<KEY, VALUE>::const_iterator it, itEnd;
 
std::enable_if< has_const_iterator< Container >::value, StlIterator< typename Container::value_type, typename Container::const_iterator > * >::type stlIterator(const Container &stlContainer)
Convenient function for creating a StlIterator from a stl container.
 
Interface for Tulip iterators. Allows basic iteration operations only.
 
StlIterator wraps a stl iterator.
 
bool hasNext()
Tells if the sequence is at its end.
 
T next()
Moves the Iterator on the next element.