#ifndef QLINKEDLIST_H
#define QLINKEDLIST_H 
#include <QtCore/qiterator.h>
#include <QtCore/qatomic.h>
#ifndef QT_NO_STL
#include <iterator>
#include <list>
#endif
typedef enum QtValidLicenseForCoreModule QtCoreModule;
struct QLinkedListData{
   public: struct QLinkedListData* n;
   public: struct QLinkedListData* p;
   public: struct QBasicAtomic ref;
   public: int size;
   public: unsigned int sharable:1;
   public: static struct QLinkedListData shared_null;
};
template < typename T > struct QLinkedListNode{
   public: inline QLinkedListNode(T const & arg);
   public: struct QLinkedListNode* n;
   public: struct QLinkedListNode* p;
   public: T t;
};
template < typename T > class QLinkedList{
   private: typedef class QLinkedListNode < T > Node;
   private: union /*anonymous*/{
      struct QLinkedListData* d;
      class QLinkedListNode < T >* e;
   };
   public: inline QLinkedList();
   public: inline QLinkedList(class QLinkedList const & l);
   public: inline bool operator !=(class QLinkedList const & l) const
   public: inline int size() const
   public: inline void detach();
   public: inline bool isDetached() const
   public: inline void setSharable(bool sharable);
   public: inline bool isEmpty() const
   public: class iterator{
      public: typedef struct std::bidirectional_iterator_tag iterator_category;
      public: typedef ptrdiff_t difference_type;
      public: typedef T value_type;
      public: typedef T* pointer;
      public: typedef T& reference;
      public: class QLinkedListNode < T >* i;
      public: inline iterator();
      public: inline iterator(class QLinkedListNode < T >* n);
      public: inline iterator(class QLinkedList::iterator const & o);
      public: inline class QLinkedList::iterator& operator =(class QLinkedList::iterator const & o);
      public: inline T& operator *() const
      public: inline T* operator ->() const
      public: inline bool operator ==(class QLinkedList::iterator const & o) const
      public: inline bool operator !=(class QLinkedList::iterator const & o) const
      public: inline bool operator ==(class QLinkedList::const_iterator const & o) const
      public: inline bool operator !=(class QLinkedList::const_iterator const & o) const
      public: inline class QLinkedList::iterator& operator ++();
      public: inline class QLinkedList::iterator operator ++(int);
      public: inline class QLinkedList::iterator& operator --();
      public: inline class QLinkedList::iterator operator --(int);
      public: inline class QLinkedList::iterator operator +(int j) const
      public: inline class QLinkedList::iterator operator -(int j) const
      public: inline class QLinkedList::iterator& operator +=(int j);
      public: inline class QLinkedList::iterator& operator -=(int j);
   };
   public: class const_iterator{
      public: typedef struct std::bidirectional_iterator_tag iterator_category;
      public: typedef ptrdiff_t difference_type;
      public: typedef T value_type;
      public: typedef T const * pointer;
      public: typedef T& reference;
      public: class QLinkedListNode < T >* i;
      public: inline const_iterator();
      public: inline const_iterator(class QLinkedListNode < T >* n);
      public: inline const_iterator(class QLinkedList::const_iterator const & o);
      public: inline const_iterator(class QLinkedList::iterator ci);
      public: inline class QLinkedList::const_iterator& operator =(class QLinkedList::const_iterator const & o);
      public: inline T& operator *() const
      public: inline T const * operator ->() const
      public: inline bool operator ==(class QLinkedList::const_iterator const & o) const
      public: inline bool operator !=(class QLinkedList::const_iterator const & o) const
      public: inline class QLinkedList::const_iterator& operator ++();
      public: inline class QLinkedList::const_iterator operator ++(int);
      public: inline class QLinkedList::const_iterator& operator --();
      public: inline class QLinkedList::const_iterator operator --(int);
      public: inline class QLinkedList::const_iterator operator +(int j) const
      public: inline class QLinkedList::const_iterator operator -(int j) const
      public: inline class QLinkedList::const_iterator& operator +=(int j);
      public: inline class QLinkedList::const_iterator& operator -=(int j);
   };
   public: inline class QLinkedList::iterator begin();
   public: inline class QLinkedList::const_iterator begin() const
   public: inline class QLinkedList::const_iterator constBegin() const
   public: inline class QLinkedList::iterator end();
   public: inline class QLinkedList::const_iterator end() const
   public: inline class QLinkedList::const_iterator constEnd() const
   public: typedef class QLinkedList::iterator Iterator;
   public: typedef class QLinkedList::const_iterator ConstIterator;
   public: inline int count() const
   public: inline T& first();
   public: inline T& first() const
   public: inline T& last();
   public: inline T& last() const
   public: inline void removeFirst();
   public: inline void removeLast();
   public: inline void push_back(T& t);
   public: inline void push_front(T& t);
   public: inline T& front();
   public: inline T& front() const
   public: inline T& back();
   public: inline T& back() const
   public: inline void pop_front();
   public: inline void pop_back();
   public: inline bool empty() const
   public: typedef int size_type;
   public: typedef T value_type;
   public: typedef T* pointer;
   public: typedef T const * const_pointer;
   public: typedef T& reference;
   public: typedef T& const_reference;
   public: typedef ptrdiff_t difference_type;
#ifndef QT_NO_STL
   public: static inline class QLinkedList fromStdList(class std::list < T, class std::allocator < _CharT > > const & list);
   public: inline class std::list < T, class std::allocator < _CharT > > toStdList() const
#endif
   public: inline class QLinkedList& operator +=(T& t);
   public: inline class QLinkedList& operator <<(T& t);
   public: inline class QLinkedList& operator <<(class QLinkedList const & l);
   public: inline ~QLinkedList();
   private: void detach_helper();
   private: void free(struct QLinkedListData* x);
   public: void clear();
   public: class QLinkedList < T >& operator =(class QLinkedList const & l);
   public: bool operator ==(class QLinkedList const & l) const
   public: void append(T const & t);
   public: void prepend(T const & t);
   public: int removeAll(T const & _t);
   public: inline T takeFirst();
   public: inline T takeLast();
   public: bool contains(T const & t) const
   public: int count(T const & t) const
   public: typename QLinkedList::iterator insert(class QLinkedList::iterator before, T const & t);
   public: typename QLinkedList::iterator erase(typename QLinkedList::iterator afirst, typename QLinkedList::iterator alast);
   public: typename QLinkedList::iterator erase(class QLinkedList::iterator pos);
   public: class QLinkedList < T >& operator +=(class QLinkedList const & l);
   public: class QLinkedList < T > operator +(class QLinkedList const & l) const
   friend class iterator;
   friend class const_iterator;
};
template < typename T > class QLinkedListIterator{
   private: class QLinkedList < T > c;
   public: inline QLinkedListIterator(class QLinkedList < T > const & container);
   private: typename QLinkedList < T >::const_iterator i;
   public: inline class QLinkedListIterator& operator =(class QLinkedList < T > const & container);
   public: inline void toFront();
   private: typedef typename QLinkedList < T >::const_iterator const_iterator;
   public: inline void toBack();
   public: inline bool hasNext() const
   public: inline T const & next();
   public: inline T const & peekNext() const
   public: inline bool hasPrevious() const
   public: inline T const & previous();
   public: inline T const & peekPrevious() const
   public: inline bool findNext(T const & t);
   public: inline bool findPrevious(T const & t);
};
template < typename T > class QMutableLinkedListIterator{
   private: QLinkedList < T >* c;
   private: inline bool item_exists() const
   private: typename QLinkedList < T >::iterator i;
   public: inline QMutableLinkedListIterator(class QLinkedList < T >& container);
   private: typename QLinkedList < T >::iterator n;
   public: inline ~QMutableLinkedListIterator();
   public: inline class QMutableLinkedListIterator& operator =(class QLinkedList < T >& container);
   private: typedef typename QLinkedList < T >::iterator iterator;
   public: inline void toFront();
   private: typedef typename QLinkedList < T >::const_iterator const_iterator;
   public: inline void toBack();
   public: inline bool hasNext() const
   public: inline T& next();
   public: inline T& peekNext() const
   public: inline bool hasPrevious() const
   public: inline T& previous();
   public: inline T& peekPrevious() const
   public: inline void remove();
   public: inline void setValue(T const & t) const
   public: inline T& value();
   public: inline T const & value() const
   public: inline void insert(T const & t);
   public: inline bool findNext(T const & t);
   public: inline bool findPrevious(T const & t);
};
#endif // QLINKEDLIST_H