CSKeyedSSkipList.h

Go to the documentation of this file.
00001 
00007 
00008 
00063 template <class K, class T, class Pr = std::less<K>, class R = RNG >
00064 class KeyedSSkipList
00065 {
00066 public:
00067   class T0;
00068   class T1;
00069   friend class T0;
00070   friend class T1;
00072   typedef size_t size_type;
00074 
00077   typedef ptrdiff_t difference_type;
00079   typedef KeyedSSkipList<K,T,Pr,R> container_type;
00081   typedef K key_type;
00083   typedef std::pair<const K, T> value_type;
00085   typedef ForwardNode<value_type> node_type;
00087 
00092   typedef T0 iterator;
00094   typedef value_type* pointer;
00096   typedef value_type& reference;
00098   typedef T data_type;
00100   typedef T mapped_type;
00102   typedef T& mapped_type_reference;
00104   typedef const T const_mapped_type;
00106   typedef const T& const_mapped_type_reference;
00108   typedef const T& const_reference;
00110   typedef T1 const_iterator;
00112 
00115   typedef std::reverse_iterator<iterator> reverse_iterator;
00117   typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
00119   typedef std::pair<iterator, bool> slpair;
00121   typedef std::pair<iterator, iterator> ipair;
00123   typedef std::pair<const_iterator, const_iterator> const_ipair;
00125   typedef Pr key_compare;
00126 
00128   class value_compare
00129     : public std::binary_function<value_type, value_type, bool>
00130   {
00131   friend container_type;
00132   public:
00133     bool operator()(const value_type& left, const value_type& right) const
00134       {return (comp(left.first, right.first)); }
00135   protected:
00136     value_compare(const key_compare &pr) : comp(pr) {}
00137     key_compare comp;
00138   };
00139 
00140 private:
00141   R rng; 
00142   key_compare KeyCompare; 
00143   value_compare ValueCompare; 
00144   unsigned int maxLevel; 
00145   unsigned int level;    
00146   node_type *head;  
00147   node_type *tail; 
00148   double probability; 
00149   size_type items; 
00150   mutable std::pair<size_type,node_type*> *update; 
00151 
00153 
00157   void Init(double probability, unsigned int maxLevel) {}
00158 
00160 
00165   node_type* Alloc(unsigned int level, const T &obj) {}
00166 
00168 
00172   node_type* Alloc(unsigned int level) {}
00173 
00175 
00178   void Free(node_type *item) {}
00179 
00181 
00184   unsigned int GenerateRandomLevel() const {}
00185 
00187   void adjust_levels() {}
00188 
00190 
00196   void scan(const key_type &val) const{}
00197 
00199 
00205   void scan(const value_type &val) const{}
00206 
00208 
00214   void scan(const node_type *nodex) const{}
00215 
00217 
00224   void scan(const iterator &where) const{}
00225 public:
00226 
00228 
00231   class T0 : public std::iterator<std::bidirectional_iterator_tag, value_type>
00232   {
00233   public:
00234     typedef std::iterator<std::bidirectional_iterator_tag, value_type> baseclass;
00235     typedef std::random_acces_iterator_tag iterator_category;
00236     typedef typename baseclass::value_type value_type;
00237     typedef typename baseclass::value_type* pointer;
00238     typedef typename baseclass::value_type& reference;
00239     typedef ptrdiff_t difference_type;
00240 
00241     friend T1;
00242     friend container_type;
00243   private:
00244     container_type *container; 
00245     node_type* node; 
00246   public:
00248     T0() {}
00249 
00251 
00254     T0(const T0 &t0){}
00255 
00257 
00260     T0(const T1 &t1){}
00261 
00263 
00267     T0(container_type *container, node_type* p){}
00268 
00270 
00273     bool operator==(const T0& other) const{}
00274 
00276 
00279     bool operator!=(const T0& other) const{}
00280 
00282 
00285     bool operator==(const T1& other) const{}
00286 
00288 
00291     bool operator!=(const T1& other) const{}
00292 
00294 
00299     T0& operator++(){}
00300 
00302 
00307     T0 operator++(int){}
00308 
00310 
00315     T0& operator--(){}
00316 
00318 
00323     T0 operator--(int){}
00324 
00326 
00331     reference operator*() const{}
00332 
00334 
00339     pointer operator->() const{}
00340 
00342 
00345     bool operator<(const T0 &other) const{}
00346 
00348 
00351     bool operator<=(const T0 &other) const{}
00352 
00354 
00357     bool operator>(const T0 &other) const{}
00358 
00360 
00363     bool operator>=(const T0 &other) const{}
00364 
00366 
00369     bool operator<(const T1 &other) const{}
00370 
00372 
00375     bool operator<=(const T1 &other) const{}
00376 
00378 
00381     bool operator>(const T1 &other) const{}
00382 
00384 
00387     bool operator>=(const T1 &other) const{}
00388   };
00389 
00391 
00394   class T1 : public std::iterator<std::bidirectional_iterator_tag, value_type, ptrdiff_t, const value_type*, const value_type&>
00395   {
00396   public:
00397     typedef std::iterator<std::bidirectional_iterator_tag, value_type> baseclass;
00398     typedef std::random_acces_iterator_tag iterator_category;
00399     typedef typename baseclass::value_type value_type;
00400     typedef typename const baseclass::value_type* pointer;
00401     typedef typename const baseclass::value_type& reference;
00402     typedef ptrdiff_t difference_type;
00403 
00404     friend T0;
00405     friend container_type;
00406   private:
00407     const container_type *container; 
00408     const node_type* node; 
00409   public:
00411     T1() {}
00412 
00414 
00417     T1(const T1 &t1){}
00418 
00420 
00423     T1(const T0 &t0){}
00424 
00426 
00430     T1(container_type *container, node_type* p){}
00431 
00433 
00436     bool operator==(const T0& other) const{}
00437 
00439 
00442     bool operator!=(const T0& other) const{}
00443 
00445 
00448     bool operator==(const T1& other) const{}
00449 
00451 
00454     bool operator!=(const T1& other) const{}
00455 
00457 
00462     T1& operator++(){}
00463 
00465 
00470     T1 operator++(int){}
00471 
00473 
00478     T1& operator--(){}
00479 
00481 
00486     T1 operator--(int){}
00487 
00489 
00494     reference operator*() const{}
00495 
00497 
00502     pointer operator->() const{}
00503 
00505 
00508     bool operator<(const T0 &other) const{}
00509 
00511 
00514     bool operator<=(const T0 &other) const{}
00515 
00517 
00520     bool operator>(const T0 &other) const{}
00521 
00523 
00526     bool operator>=(const T0 &other) const{}
00527 
00529 
00532     bool operator<(const T1 &other) const{}
00533 
00535 
00538     bool operator<=(const T1 &other) const{}
00539 
00541 
00544     bool operator>(const T1 &other) const{}
00545 
00547 
00550     bool operator>=(const T1 &other) const{}
00551   };
00552 
00554 
00558   KeyedSSkipList(){}
00559 
00561 
00567   explicit KeyedSSkipList(size_type maxNodes){}
00568 
00570 
00574   KeyedSSkipList(double probability, unsigned int maxLevel){}
00575 
00577 
00582   KeyedSSkipList(const container_type &source){}
00583 
00585 
00592   template<class InIt> KeyedSSkipList(InIt first, InIt last){}
00593 
00595 
00601   template<class InIt> KeyedSSkipList(InIt first, InIt last, double probability, unsigned int maxLevel){}
00602 
00604 
00612   template<class InIt> KeyedSSkipList(InIt first, InIt last, size_type maxNodes){}
00613 
00615 
00621   explicit KeyedSSkipList(const key_compare& comp){}
00622 
00624 
00632   template<class InIt> KeyedSSkipList(InIt first, InIt last, const key_compare& comp){}
00633 
00635 
00642   template<class InIt> KeyedSSkipList(InIt first, InIt last, const key_compare& comp, double probability, unsigned int maxLevel){}
00643 
00645 
00654   template<class InIt> KeyedSSkipList(InIt first, InIt last, const key_compare& comp, size_type maxNodes) : Compare(comp){}
00655 
00657 
00660   ~KeyedSSkipList(){}
00661 
00662 
00664 
00670   container_type& operator=(const container_type &source){}
00671 
00673 
00676   iterator begin(){}
00677 
00679 
00682   iterator end(){}
00683 
00685 
00688   const_iterator begin() const{}
00689 
00691 
00694   const_iterator end() const{}
00695 
00697 
00700   reverse_iterator rbegin(){}
00701 
00703 
00706   reverse_iterator rend(){}
00707 
00709 
00712   const_reverse_iterator rbegin() const{}
00713 
00715 
00718   const_reverse_iterator rend() const{}
00719 
00721 
00724   size_type size() const{}
00725 
00727 
00730   bool empty() const{}
00731 
00733 
00736   reference front(){}
00737 
00739 
00742   const_reference front() const{}
00743 
00745 
00748   reference back(){}
00749 
00751 
00754   const_reference back() const{}
00755 
00757   void pop_front(){}
00758 
00760   void destroy_front(){}
00761 
00763   void pop_back(){}
00764 
00766   void destroy_back(){}
00767 
00769 
00773   template<class InIt> void assign(InIt first, InIt last){}
00774 
00776 
00786   slpair insert(const value_type& val){}
00787 
00789 
00795   iterator insert(const iterator &where, const value_type& val) {}
00796 
00798 
00802   template<class InIt> void insert(InIt first, InIt last) {}
00803 
00805   void clear(){}
00806 
00808   void destroy(){}
00809 
00811   iterator erase(const iterator &where){}
00812 
00814   iterator destroy(const iterator &where){}
00815 
00817 
00824   iterator erase(const iterator &first, const iterator &last){}
00825 
00827 
00834   iterator destroy(const iterator &first, const iterator &last){}
00835 
00837 
00841   size_type erase(const key_type &keyval){}
00842 
00844 
00848   size_type destroy(const key_type &keyval){}
00849 
00851 
00854   void swap(container_type& right) {}
00855 
00857 
00860   template<class Pr1> void erase_if(Pr1 pred);
00861 
00863 
00866   template<class Pr4> void destroy_if(Pr4 pred);
00867 
00869 
00880   void cut(const iterator &first, const iterator &last, container_type& right);
00881 
00883 
00889   mapped_type_reference operator[](const key_type& key){}
00890 
00892 
00898   const_mapped_type_reference operator[](const key_type& key) const{}
00899 
00901 
00907   mapped_type_reference operator()(const key_type& key){}
00908 
00910 
00916   const_mapped_type_reference operator()(const key_type& key) const{}
00917 
00919   key_compare key_comp() const { }
00920 
00922   value_compare value_comp() const { }
00923 
00925   size_type max_size() const{}
00926 
00928 
00934   const key_type& key(const value_type& value) const {}
00935 
00937 
00943   mapped_type& value(value_type& value) {}
00944 
00946 
00950   iterator find(const key_type& keyval) {}
00951 
00953 
00957   const_iterator find(const key_type& keyval) const {}
00958 
00960 
00964   size_type count(const key_type& keyval) const {}
00965 
00966 
00968 
00972   iterator lower_bound(const key_type& keyval) {}
00973 
00975 
00979   const_iterator lower_bound(const key_type& keyval) const {}
00980 
00982 
00986   iterator upper_bound(const key_type& keyval) {}
00987 
00989 
00993   const_iterator upper_bound(const key_type& keyval) const {}
00994 
00996 
01000   ipair equal_range(const key_type& keyval) {}
01001 
01003 
01007   const_ipair equal_range(const key_type& keyval) const {}
01008 };
01009 
01011 
01016 template <class K, class T, class Pr, class R>
01017 bool operator==(const KeyedSSkipList<K,T,Pr,R> &left, const KeyedSSkipList<K,T,Pr,R> &right)
01018 {
01019   return ((left.size() == right.size()) &&
01020           (std::equal(left.begin(), left.end(), right.begin())));
01021 
01022 }
01023 
01025 
01030 template <class K, class T, class Pr, class R>
01031 bool operator!=(const KeyedSSkipList<K,T,Pr,R> &left, const KeyedSSkipList<K,T,Pr,R> &right)
01032 {
01033   return !(left==right);
01034 }
01035 
01037 
01042 template <class K, class T, class Pr, class R>
01043 bool operator<(const KeyedSSkipList<K,T,Pr,R> &left, const KeyedSSkipList<K,T,Pr,R> &right)
01044 {
01045   return lexicographical_compare(left.begin(),left.end(),right.begin(),right.end(),left.value_comp());
01046 }
01047 
01049 
01054 template <class K, class T, class Pr, class R>
01055 bool operator<=(const KeyedSSkipList<K,T,Pr,R> &left, const KeyedSSkipList<K,T,Pr,R> &right)
01056 {
01057   return !(right < left);
01058 }
01059 
01061 
01066 template <class K, class T, class Pr, class R>
01067 bool operator>(const KeyedSSkipList<K,T,Pr,R> &left, const KeyedSSkipList<K,T,Pr,R> &right)
01068 {
01069   return (right < left);
01070 }
01071 
01073 
01078 template <class K, class T, class Pr, class R>
01079 bool operator>=(const KeyedSSkipList<K,T,Pr,R> &left, const KeyedSSkipList<K,T,Pr,R> &right)
01080 {
01081   return !(left < right);
01082 }
01083 
01084 /*#define csarg1 template <class T, class Pr, class R>
01085 #define csarg2 KeyedSSkipList<K,T,Pr,R>
01086 CSDefineCompOps(csarg1, csarg2)
01087 #undef csarg1
01088 #undef csarg2
01089 
01090 #undef CSUNIQUE
01091 #define CSUNIQUE(a,b) b
01092 */
01093 
01095 
01150 template <class K, class T, class Pr = std::less<K>, class R = RNG >
01151 class MultiKeyedSSkipList
01152 {
01153 public:
01154   class T0;
01155   class T1;
01156   friend class T0;
01157   friend class T1;
01159   typedef size_t size_type;
01161 
01164   typedef ptrdiff_t difference_type;
01166   typedef MultiKeyedSSkipList<K,T,Pr> container_type;
01168   typedef K key_type;
01170   typedef std::pair<const K, T> value_type;
01172   typedef ForwardNode<value_type> node_type;
01174 
01179   typedef T0 iterator;
01181   typedef value_type* pointer;
01183   typedef value_type& reference;
01185   typedef T data_type;
01187   typedef T mapped_type;
01189   typedef T& mapped_type_reference;
01191   typedef const T const_mapped_type;
01193   typedef const T& const_mapped_type_reference;
01195   typedef const T& const_reference;
01197   typedef T1 const_iterator;
01199 
01202   typedef std::reverse_iterator<iterator> reverse_iterator;
01204   typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
01206   typedef std::pair<iterator, iterator> ipair;
01208   typedef std::pair<const_iterator, const_iterator> const_ipair;
01210   typedef Pr key_compare;
01211 
01213   class value_compare
01214     : public std::binary_function<value_type, value_type, bool>
01215   {
01216   friend container_type;
01217   public:
01218     bool operator()(const value_type& left, const value_type& right) const
01219       {return (comp(left.first, right.first)); }
01220   protected:
01221     value_compare(const key_compare &pr) : comp(pr) {}
01222     key_compare comp;
01223   };
01224 
01225 private:
01226   R rng; 
01227   key_compare KeyCompare; 
01228   value_compare ValueCompare; 
01229   unsigned int maxLevel; 
01230   unsigned int level;    
01231   node_type *head;  
01232   node_type *tail; 
01233   double probability; 
01234   size_type items; 
01235   mutable std::pair<size_type,node_type*> *update; 
01236 
01238 
01242   void Init(double probability, unsigned int maxLevel) {}
01243 
01245 
01250   node_type* Alloc(unsigned int level, const T &obj) {}
01251 
01253 
01257   node_type* Alloc(unsigned int level) {}
01258 
01260 
01263   void Free(node_type *item) {}
01264 
01266 
01269   unsigned int GenerateRandomLevel() const {}
01270 
01272   void adjust_levels() {}
01273 
01275 
01281   void scan(const key_type &val) const{}
01282 
01284 
01290   void scan(const value_type &val) const{}
01291 
01293 
01299   void scan(const node_type *nodex) const{}
01300 
01302 
01309   void scan(const iterator &where) const{}
01310 
01311 public:
01313 
01316   class T0 : public std::iterator<std::bidirectional_iterator_tag, value_type>
01317   {
01318   public:
01319     typedef std::iterator<std::bidirectional_iterator_tag, value_type> baseclass;
01320     typedef std::random_acces_iterator_tag iterator_category;
01321     typedef typename baseclass::value_type value_type;
01322     typedef typename baseclass::value_type* pointer;
01323     typedef typename baseclass::value_type& reference;
01324     typedef ptrdiff_t difference_type;
01325 
01326     friend T1;
01327     friend container_type;
01328   private:
01329     container_type *container; 
01330     node_type* node; 
01331   public:
01333     T0() {}
01334 
01336 
01339     T0(const T0 &t0){}
01340 
01342 
01345     T0(const T1 &t1){}
01346 
01348 
01352     T0(container_type *container, node_type* p){}
01353 
01355 
01358     bool operator==(const T0& other) const{}
01359 
01361 
01364     bool operator!=(const T0& other) const{}
01365 
01367 
01370     bool operator==(const T1& other) const{}
01371 
01373 
01376     bool operator!=(const T1& other) const{}
01377 
01379 
01384     T0& operator++(){}
01385 
01387 
01392     T0 operator++(int){}
01393 
01395 
01400     T0& operator--(){}
01401 
01403 
01408     T0 operator--(int){}
01409 
01411 
01416     reference operator*() const{}
01417 
01419 
01424     pointer operator->() const{}
01425 
01427 
01430     bool operator<(const T0 &other) const{}
01431 
01433 
01436     bool operator<=(const T0 &other) const{}
01437 
01439 
01442     bool operator>(const T0 &other) const{}
01443 
01445 
01448     bool operator>=(const T0 &other) const{}
01449 
01451 
01454     bool operator<(const T1 &other) const{}
01455 
01457 
01460     bool operator<=(const T1 &other) const{}
01461 
01463 
01466     bool operator>(const T1 &other) const{}
01467 
01469 
01472     bool operator>=(const T1 &other) const{}
01473   };
01474 
01476 
01479   class T1 : public std::iterator<std::bidirectional_iterator_tag, value_type, ptrdiff_t, const value_type*, const value_type&>
01480   {
01481   public:
01482     typedef std::iterator<std::bidirectional_iterator_tag, value_type> baseclass;
01483     typedef std::random_acces_iterator_tag iterator_category;
01484     typedef typename baseclass::value_type value_type;
01485     typedef typename const baseclass::value_type* pointer;
01486     typedef typename const baseclass::value_type& reference;
01487     typedef ptrdiff_t difference_type;
01488 
01489     friend T0;
01490     friend container_type;
01491   private:
01492     const container_type *container; 
01493     const node_type* node; 
01494   public:
01496     T1() {}
01497 
01499 
01502     T1(const T1 &t1){}
01503 
01505 
01508     T1(const T0 &t0){}
01509 
01511 
01515     T1(container_type *container, node_type* p){}
01516 
01518 
01521     bool operator==(const T0& other) const{}
01522 
01524 
01527     bool operator!=(const T0& other) const{}
01528 
01530 
01533     bool operator==(const T1& other) const{}
01534 
01536 
01539     bool operator!=(const T1& other) const{}
01540 
01542 
01547     T1& operator++(){}
01548 
01550 
01555     T1 operator++(int){}
01556 
01558 
01563     T1& operator--(){}
01564 
01566 
01571     T1 operator--(int){}
01572 
01574 
01579     reference operator*() const{}
01580 
01582 
01587     pointer operator->() const{}
01588 
01590 
01593     bool operator<(const T0 &other) const{}
01594 
01596 
01599     bool operator<=(const T0 &other) const{}
01600 
01602 
01605     bool operator>(const T0 &other) const{}
01606 
01608 
01611     bool operator>=(const T0 &other) const{}
01612 
01614 
01617     bool operator<(const T1 &other) const{}
01618 
01620 
01623     bool operator<=(const T1 &other) const{}
01624 
01626 
01629     bool operator>(const T1 &other) const{}
01630 
01632 
01635     bool operator>=(const T1 &other) const{}
01636   };
01637 
01638 
01640 
01644   MultiKeyedSSkipList(){}
01645 
01647 
01653   explicit MultiKeyedSSkipList(size_type maxNodes){}
01654 
01656 
01660   MultiKeyedSSkipList(double probability, unsigned int maxLevel){}
01661 
01663 
01668   MultiKeyedSSkipList(const container_type &source){}
01669 
01671 
01678   template<class InIt> MultiKeyedSSkipList(InIt first, InIt last){}
01679 
01681 
01687   template<class InIt> MultiKeyedSSkipList(InIt first, InIt last, double probability, unsigned int maxLevel){}
01688 
01690 
01698   template<class InIt> MultiKeyedSSkipList(InIt first, InIt last, size_type maxNodes){}
01699 
01701 
01707   explicit MultiKeyedSSkipList(const key_compare& comp){}
01708 
01710 
01718   template<class InIt> MultiKeyedSSkipList(InIt first, InIt last, const key_compare& comp){}
01719 
01721 
01728   template<class InIt> MultiKeyedSSkipList(InIt first, InIt last, const key_compare& comp, double probability, unsigned int maxLevel){}
01729 
01731 
01740   template<class InIt> MultiKeyedSSkipList(InIt first, InIt last, const key_compare& comp, size_type maxNodes) : Compare(comp){}
01741 
01743 
01746   ~MultiKeyedSSkipList(){}
01747 
01748 
01750 
01756   container_type& operator=(const container_type &source){}
01757 
01759 
01762   iterator begin(){}
01763 
01765 
01768   iterator end(){}
01769 
01771 
01774   const_iterator begin() const{}
01775 
01777 
01780   const_iterator end() const{}
01781 
01783 
01786   reverse_iterator rbegin(){}
01787 
01789 
01792   reverse_iterator rend(){}
01793 
01795 
01798   const_reverse_iterator rbegin() const{}
01799 
01801 
01804   const_reverse_iterator rend() const{}
01805 
01807 
01810   size_type size() const{}
01811 
01813 
01816   bool empty() const{}
01817 
01819 
01822   reference front(){}
01823 
01825 
01828   const_reference front() const{}
01829 
01831 
01834   reference back(){}
01835 
01837 
01840   const_reference back() const{}
01841 
01843   void pop_front(){}
01844 
01846   void destroy_front(){}
01847 
01849   void pop_back(){}
01850 
01852   void destroy_back(){}
01853 
01855 
01859   template<class InIt> void assign(InIt first, InIt last){}
01860 
01862 
01866   iterator insert(const value_type& val){}
01867 
01869 
01875   iterator insert(const iterator &where, const value_type& val) {}
01876 
01878 
01882   template<class InIt> void insert(InIt first, InIt last) {}
01883 
01885   void clear(){}
01886 
01888   void destroy(){}
01889 
01891   iterator erase(const iterator &where){}
01892 
01894   iterator destroy(const iterator &where){}
01895 
01897 
01904   iterator erase(const iterator &first, const iterator &last){}
01905 
01907 
01914   iterator destroy(const iterator &first, const iterator &last){}
01915 
01917 
01921   size_type erase(const key_type &keyval){}
01922 
01924 
01928   size_type destroy(const key_type &keyval){}
01929 
01931 
01934   void swap(container_type& right) {}
01935 
01937 
01940   template<class Pr1> void erase_if(Pr1 pred);
01941 
01943 
01946   template<class Pr4> void destroy_if(Pr4 pred);
01947 
01949 
01960   void cut(const iterator &first, const iterator &last, container_type& right);
01961 
01963   key_compare key_comp() const { }
01964 
01966   value_compare value_comp() const { }
01967 
01969   size_type max_size() const{}
01970 
01972 
01978   const key_type& key(const value_type& value) const {}
01979 
01981 
01987   mapped_type& value(value_type& value) {}
01988 
01990 
01994   iterator find(const key_type& keyval) {}
01995 
01997 
02001   const_iterator find(const key_type& keyval) const {}
02002 
02004 
02008   size_type count(const key_type& keyval) const {}
02009 
02010 
02012 
02016   iterator lower_bound(const key_type& keyval) {}
02017 
02019 
02023   const_iterator lower_bound(const key_type& keyval) const {}
02024 
02026 
02030   iterator upper_bound(const key_type& keyval) {}
02031 
02033 
02037   const_iterator upper_bound(const key_type& keyval) const {}
02038 
02040 
02044   ipair equal_range(const key_type& keyval) {}
02045 
02047 
02051   const_ipair equal_range(const key_type& keyval) const {}
02052 };
02053 
02055 
02060 template <class K, class T, class Pr, class R>
02061 bool operator==(const MultiKeyedSSkipList<K,T,Pr,R> &left, const MultiKeyedSSkipList<K,T,Pr,R> &right)
02062 {
02063   return ((left.size() == right.size()) &&
02064           (std::equal(left.begin(), left.end(), right.begin())));
02065 }
02066 
02068 
02073 template <class K, class T, class Pr, class R>
02074 bool operator!=(const MultiKeyedSSkipList<K,T,Pr,R> &left, const MultiKeyedSSkipList<K,T,Pr,R> &right)
02075 {
02076   return !(left==right);
02077 }
02078 
02080 
02085 template <class K, class T, class Pr, class R>
02086 bool operator<(const MultiKeyedSSkipList<K,T,Pr,R> &left, const MultiKeyedSSkipList<K,T,Pr,R> &right)
02087 {
02088   return lexicographical_compare(left.begin(),left.end(),right.begin(),right.end(),left.value_comp());
02089 }
02090 
02092 
02097 template <class K, class T, class Pr, class R>
02098 bool operator<=(const MultiKeyedSSkipList<K,T,Pr,R> &left, const MultiKeyedSSkipList<K,T,Pr,R> &right)
02099 {
02100   return !(right < left);
02101 }
02102 
02104 
02109 template <class K, class T, class Pr, class R>
02110 bool operator>(const MultiKeyedSSkipList<K,T,Pr,R> &left, const MultiKeyedSSkipList<K,T,Pr,R> &right)
02111 {
02112   return (right < left);
02113 }
02114 
02116 
02121 template <class K, class T, class Pr, class R>
02122 bool operator>=(const MultiKeyedSSkipList<K,T,Pr,R> &left, const MultiKeyedSSkipList<K,T,Pr,R> &right)
02123 {
02124   return !(left < right);
02125 }
02126 
02127 
02128 /*#define csarg1 template <class T, class Pr, class R>
02129 #define csarg2 MultiKeyedSSkipList<K,T,Pr,R>
02130 CSDefineCompOps(csarg1, csarg2)
02131 #undef csarg1
02132 #undef csarg2
02133 */
 All Classes Files Functions Variables Typedefs