#include "python.h"

namespace python {

   template<class T>
   SeqBase<T>::const_iterator::~const_iterator () {}

   template<class T>
   SeqBase<T>::const_iterator::const_iterator () {
      seq = 0;
      count = 0;
   }

   template<class T>
   SeqBase<T>::const_iterator::const_iterator (const SeqBase<T>* s, int where) 
      :seq(s), count(where) {} 

   template<class T>
   SeqBase<T>::const_iterator::const_iterator(const const_iterator& other) {
      seq = other.seq;
      count = other.count;
   }

   template<class T>
   bool SeqBase<T>::const_iterator::operator== (const const_iterator& other) {
      return (count == other.count);
   }

   template<class T>
   bool SeqBase<T>::const_iterator::operator!= (const const_iterator& other) {
      return (count != other.count);
   }

   template<class T>
   bool SeqBase<T>::const_iterator::operator< (const const_iterator& other) {
      return (count < other.count);
   }

   template<class T>
   bool SeqBase<T>::const_iterator::operator> (const const_iterator& other) {
      return (count > other.count);
   }

   template<class T>
   bool SeqBase<T>::const_iterator::operator<= (const const_iterator& other) {
      return (count <= other.count);
   }

   template<class T>
   bool SeqBase<T>::const_iterator::operator>= (const const_iterator& other) {
      return (count >= other.count);
   }

   template<class T>
   const T SeqBase<T>::const_iterator::operator*() const { 
      return seq->getItem(count);
   }

   template<class T>
   const T SeqBase<T>::const_iterator::operator[] (sequence_index_type i) const {
      return seq->getItem(count + i);
   }

   template<class T> typename
   SeqBase<T>::const_iterator::const_iterator& SeqBase<T>::const_iterator::operator=(const const_iterator& other) {
      if (this == &other) return *this;
      seq = other.seq;
      count = other.count;
      return *this;
   }

   template<class T> typename
   SeqBase<T>::const_iterator::const_iterator SeqBase<T>::const_iterator::operator+(int n) const {
      return const_iterator(seq, count + n);
   }

   template<class T> typename
   SeqBase<T>::const_iterator::const_iterator SeqBase<T>::const_iterator::operator-(int n) const {
      return const_iterator(seq, count - n);
   }

   template<class T> typename
   SeqBase<T>::const_iterator::const_iterator& SeqBase<T>::const_iterator::operator+=(int n) {
      count = count + n;
      return *this;
   }

   template<class T> typename
  SeqBase<T>::const_iterator::const_iterator& SeqBase<T>::const_iterator::operator-=(int n) {
      count = count - n;
      return *this;
   }

   template<class T>
   int SeqBase<T>::const_iterator::operator-(const const_iterator& other) const {
      if (seq != other.seq) 
         throw RuntimeError ("SeqBase<T>::const_iterator::- error");
      return count - other.count;
   }
   // prefix ++
   template<class T> typename
   SeqBase<T>::const_iterator::const_iterator& SeqBase<T>::const_iterator::operator++ () { count++; return *this;}
   // postfix ++
   template<class T> typename
   SeqBase<T>::const_iterator::const_iterator SeqBase<T>::const_iterator::operator++ (int) { return const_iterator(seq, count++);}
   // prefix --
   template<class T> typename
   SeqBase<T>::const_iterator::const_iterator& SeqBase<T>::const_iterator::operator-- () { count--; return *this;}
   // postfix --
   template<class T> typename
   SeqBase<T>::const_iterator::const_iterator SeqBase<T>::const_iterator::operator-- (int) { return const_iterator(seq, count--);}

}


syntax highlighted by Code2HTML, v. 0.9.1