#ifndef QMAP_H
#define QMAP_H 
#ifndef QATOMIC_H
#define QATOMIC_H 
#if defined(QT_MOC) || defined(QT_BUILD_QMAKE) || defined(QT_RCC) || defined(QT_UIC)
#else
#include <QtCore/qatomic_arch.h>
#endif
#include <QtCore/qglobal.h>
#ifndef Q_SPECIALIZED_QATOMIC
struct QBasicAtomic{
   public: int volatile atomic;
   public: inline void init(int x = 0);
   public: inline bool ref();
   public: inline bool deref();
   public: inline bool operator ==(int x) const
   public: inline bool operator !=(int x) const
   public: inline bool operator !() const
   public: inline operator int () const
   public: inline struct QBasicAtomic& operator =(int x);
   public: inline bool testAndSet(int expected, int newval);
   public: inline bool testAndSetAcquire(int expected, int newval);
   public: inline bool testAndSetRelease(int expected, int newval);
   public: inline int exchange(int newval);
};
template < typename T > struct QBasicAtomicPointer{
   public: T volatile * pointer;
   public: inline void init(T* t = 0);
   public: inline bool operator ==(T* t) const
   public: inline bool operator !=(T* t) const
   public: inline bool operator !() const
   public: inline operator T* () const
   public: inline T* operator ->() const
   public: inline struct QBasicAtomicPointer& operator =(T* t);
   public: inline bool testAndSet(T* expected, T* newval);
   public: inline T* exchange(T* newval);
};
#define Q_ATOMIC_INIT(a) { (a) }

#endif // Q_SPECIALIZED_QATOMIC
inline struct QMapData* qAtomicSetPtr(struct QMapData* volatile * ptr, struct QMapData* newval);
template < typename T > inline T qAtomicSetPtr(T volatile * ptr, T newval);
class QAtomic: public QBasicAtomic{
   public: inline QAtomic(int x = 0);
   public: inline QAtomic(class QAtomic const & copy);
   public: inline class QAtomic& operator =(int x);
   public: inline class QAtomic& operator =(class QAtomic const & copy);
};
template < typename T > class QAtomicPointer: public QBasicAtomicPointer < T >{
   public: inline QAtomicPointer(T* t = 0);
   public: inline QAtomicPointer(class QAtomicPointer const & copy);
   public: inline class QAtomicPointer& operator =(T* t);
   public: inline class QAtomicPointer& operator =(class QAtomicPointer const & copy);
};
template < typename T > inline void qAtomicAssign(T* & d, T* x);
template < typename T > inline void qAtomicAssign(class QBasicAtomicPointer < T >& d, T* x);
template < typename T > inline void qAtomicAssign(class QBasicAtomicPointer < T >& d, class QBasicAtomicPointer < T > const & x);
template < typename T > inline void qAtomicDetach(T* & d);
template < typename T > inline void qAtomicDetach(class QBasicAtomicPointer < T >& d);
#endif // QATOMIC_H
#include <QtCore/qiterator.h>
#include <QtCore/qlist.h>
#ifndef QT_NO_STL
#include <map>
#endif
#include <new>
#undef QT_MAP_DEBUG

typedef enum QtValidLicenseForCoreModule QtCoreModule;
struct QMapData{
   public: struct Node{
      public: struct QMapData::Node* backward;
      public: struct QMapData::Node* forward[1];
   };
   public: enum /*anonymous*/{
      LastLevel = 11,
      Sparseness = 3,
   };
   public: struct QMapData* backward;
   public: struct QMapData* forward[12];
   public: struct QBasicAtomic ref;
   public: int topLevel;
   public: int size;
   public: uint randomBits;
   public: unsigned int insertInOrder:1;
   public: unsigned int sharable:1;
   public: static struct QMapData* createData();
   public: void continueFreeData(int offset);
   public: struct QMapData::Node* node_create(struct QMapData::Node* * update, int offset);
   public: void node_delete(struct QMapData::Node* * update, int offset, struct QMapData::Node* node);
   public: static struct QMapData shared_null;
};
template < typename Key > inline bool qMapLessThanKey(Key const & key1, Key const & key2);
#ifndef QT_NO_PARTIAL_TEMPLATE_SPECIALIZATION
template < typename Ptr > inline bool qMapLessThanKey(Ptr* key1, Ptr* key2);
template < typename Ptr > inline bool qMapLessThanKey(Ptr const * key1, Ptr const * key2);
#endif // QT_NO_PARTIAL_TEMPLATE_SPECIALIZATION
#if !defined(QT_NO_DATASTREAM)
template < typename Key, typename T > class QMap{
   private: struct Node{
      public: Key key;
      public: T value;
      public: struct QMapData::Node* backward;
      public: struct QMapData::Node* forward[1];
   };
   private: union /*anonymous*/{
      struct QMapData* d;
      struct QMapData::Node* e;
   };
   private: struct PayloadNode{
      public: Key key;
      public: T value;
      public: struct QMapData::Node* backward;
   };
   private: static inline int payload();
   private: static inline struct QMap::Node* concrete(struct QMapData::Node* node);
   public: inline QMap();
   public: inline QMap(class QMap const & other);
   public: inline ~QMap();
   public: inline bool operator !=(class QMap const & other) const
   public: inline int size() const
   public: inline bool isEmpty() const
   public: inline void detach();
   public: inline bool isDetached() const
   public: inline void setSharable(bool sharable);
   public: class iterator{
      private: struct QMapData::Node* i;
      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: inline operator struct QMapData::Node* () const
      public: inline iterator();
      public: inline iterator(struct QMapData::Node* node);
      public: inline Key const & key() const
      public: inline T& value() const
      public: inline T& operator *() const
      public: inline T* operator ->() const
      public: inline bool operator ==(class QMap::iterator const & o) const
      public: inline bool operator !=(class QMap::iterator const & o) const
      public: inline class QMap::iterator& operator ++();
      public: inline class QMap::iterator operator ++(int);
      public: inline class QMap::iterator& operator --();
      public: inline class QMap::iterator operator --(int);
      public: inline class QMap::iterator operator +(int j) const
      public: inline class QMap::iterator operator -(int j) const
      public: inline class QMap::iterator& operator +=(int j);
      public: inline class QMap::iterator& operator -=(int j);
      public: inline bool operator ==(class QMap::const_iterator const & o) const
      public: inline bool operator !=(class QMap::const_iterator const & o) const
      private: inline operator bool () const
   };
   public: class const_iterator{
      private: struct QMapData::Node* i;
      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: inline operator struct QMapData::Node* () const
      public: inline const_iterator();
      public: inline const_iterator(struct QMapData::Node* node);
#ifdef QT_STRICT_ITERATORS
#else
      public: inline const_iterator(class QMap::iterator const & o);
#endif
      public: inline Key const & key() const
      public: inline T& value() const
      public: inline T& operator *() const
      public: inline T const * operator ->() const
      public: inline bool operator ==(class QMap::const_iterator const & o) const
      public: inline bool operator !=(class QMap::const_iterator const & o) const
      public: inline class QMap::const_iterator& operator ++();
      public: inline class QMap::const_iterator operator ++(int);
      public: inline class QMap::const_iterator& operator --();
      public: inline class QMap::const_iterator operator --(int);
      public: inline class QMap::const_iterator operator +(int j) const
      public: inline class QMap::const_iterator operator -(int j) const
      public: inline class QMap::const_iterator& operator +=(int j);
      public: inline class QMap::const_iterator& operator -=(int j);
      private: inline operator bool () const
   };
   public: inline class QMap::iterator begin();
   public: inline class QMap::const_iterator begin() const
   public: inline class QMap::const_iterator constBegin() const
   public: inline class QMap::iterator end();
   public: inline class QMap::const_iterator end() const
   public: inline class QMap::const_iterator constEnd() const
   public: typedef class QMap::iterator Iterator;
   public: typedef class QMap::const_iterator ConstIterator;
   public: inline int count() const
   public: typedef Key key_type;
   public: typedef T mapped_type;
   public: typedef ptrdiff_t difference_type;
   public: typedef int size_type;
   public: inline bool empty() const
   public: inline class QMap < aKey, aT >& operator =(class QMap const & other);
   public: inline void clear();
   private: inline struct QMapData::Node* node_create(struct QMapData* adt, struct QMapData::Node* * aupdate, Key const & akey, T const & avalue);
   private: inline struct QMapData::Node* findNode(Key const & akey) const
   public: inline T const value(Key const & akey) const
   public: inline T const value(Key const & akey, T& adefaultValue) const
   public: inline T const operator [](Key const & akey) const
   public: inline T& operator [](Key const & akey);
   public: inline int count(Key const & akey) const
   public: inline bool contains(Key const & akey) const
   public: inline typename QMap::iterator insert(Key const & akey, T const & avalue);
   public: inline typename QMap::iterator insertMulti(Key const & akey, T const & avalue);
   public: inline typename QMap::const_iterator find(Key const & akey) const
   public: inline typename QMap::const_iterator constFind(Key const & akey) const
   public: inline typename QMap::iterator find(Key const & akey);
   public: inline class QMap < aKey, aT >& unite(class QMap const & other);
   private: void freeData(struct QMapData* x);
   public: int remove(Key const & akey);
   public: T take(Key const & akey);
   public: typename QMap::iterator erase(class QMap::iterator it);
   private: void detach_helper();
   private: struct QMapData::Node* mutableFindNode(struct QMapData::Node* * aupdate, Key const & akey) const
   public: class QList < T > uniqueKeys() const
   public: class QList < T > keys() const
   public: class QList < T > keys(T const & avalue) const
   public: Key const key(T const & avalue) const
   public: class QList < T > values() const
   public: class QList < T > values(Key const & akey) const
   public: inline typename QMap::const_iterator lowerBound(Key const & akey) const
   public: inline typename QMap::iterator lowerBound(Key const & akey);
   public: inline typename QMap::const_iterator upperBound(Key const & akey) const
   public: inline typename QMap::iterator upperBound(Key const & akey);
   public: bool operator ==(class QMap const & other) const
#ifndef QT_NO_STL
   public: explicit QMap(class std::map < Key, T, class std::less < _Key >, class std::allocator < class std::pair < _Key const , _Tp > > > const & other);
   public: class std::map < Key, T, class std::less < _Key >, class std::allocator < class std::pair < _Key const , _Tp > > > toStdMap() const
#endif
#if !defined(QT_NO_DATASTREAM)
   friend class iterator;
   friend class const_iterator;
   friend public: operator struct QDataStream& (struct QDataStream&, class QMap < aKey, aT >&);
#endif
};
#endif
#if !defined(QT_NO_DATASTREAM)
template < typename aKey, typename aT > struct QDataStream& operator >>(struct QDataStream& in, class QMap < aKey, aT >& map);
#if !defined(Q_CC_BOR)
#if defined Q_CC_MSVC && _MSC_VER < 1300
#else
template < typename aKey, typename aT > struct QDataStream& operator >>(struct QDataStream& in, class QMap < aKey, aT >& map);
#endif
#endif
#endif
template < typename Key, typename T > class QMultiMap: public QMap < aKey, aT >{
   public: inline QMultiMap();
   public: inline QMultiMap(class QMap < aKey, aT > const & other);
   public: inline class QMultiMap& operator +=(class QMultiMap const & other);
   public: inline class QMultiMap operator +(class QMultiMap const & other) const
   private: T& operator [](Key const & key);
   private: T const operator [](Key const & key) const
   public: inline typename QMap::iterator replace(Key const & akey, T const & avalue);
   public: inline typename QMap::iterator insert(Key const & akey, T const & avalue);
};
template < typename Key, typename T > class QMapIterator{
   private: class QMap < aKey, aT > c;
   private: inline bool item_exists() const
   private: typename QMap < aKey, aT >::const_iterator i;
   public: inline QMapIterator(class QMap < aKey, aT > const & container);
   private: typename QMap < aKey, aT >::const_iterator n;
   public: inline class QMapIterator& operator =(class QMap < aKey, aT > const & container);
   public: inline void toFront();
   private: typedef typename QMap < aKey, aT >::const_iterator const_iterator;
   public: inline void toBack();
   private: typedef typename QMap < aKey, aT >::const_iterator Item;
   public: inline bool hasNext() const
   public: inline typename QMap < aKey, aT >::const_iterator next();
   public: inline typename QMap < aKey, aT >::const_iterator peekNext() const
   public: inline bool hasPrevious() const
   public: inline typename QMap < aKey, aT >::const_iterator previous();
   public: inline typename QMap < aKey, aT >::const_iterator peekPrevious() const
   public: inline T const & value() const
   public: inline Key const & key() const
   public: inline bool findNext(T const & t);
   public: inline bool findPrevious(T const & t);
};
template < typename Key, typename T > class QMutableMapIterator{
   private: QMap < aKey, aT >* c;
   private: inline bool item_exists() const
   private: typename QMap < aKey, aT >::iterator i;
   public: inline QMutableMapIterator(class QMap < aKey, aT >& container);
   private: typename QMap < aKey, aT >::iterator n;
   public: inline ~QMutableMapIterator();
   public: inline class QMutableMapIterator& operator =(class QMap < aKey, aT >& container);
   private: typedef typename QMap < aKey, aT >::iterator iterator;
   public: inline void toFront();
   private: typedef typename QMap < aKey, aT >::const_iterator const_iterator;
   public: inline void toBack();
   private: typedef typename QMap < aKey, aT >::iterator Item;
   public: inline bool hasNext() const
   public: inline typename QMap < aKey, aT >::iterator next();
   public: inline typename QMap < aKey, aT >::iterator peekNext() const
   public: inline bool hasPrevious() const
   public: inline typename QMap < aKey, aT >::iterator previous();
   public: inline typename QMap < aKey, aT >::iterator peekPrevious() const
   public: inline void remove();
   public: inline void setValue(T const & t);
   public: inline T& value();
   public: inline T const & value() const
   public: inline Key const & key() const
   public: inline bool findNext(T const & t);
   public: inline bool findPrevious(T const & t);
};
#endif // QMAP_H