CSAccessSSkipList.h

Go to the documentation of this file.
00001 
00007 
00008 
00063 template <class K, class T, class A=XAccessSelf<K,T>, class Pr = std::less<K>, class R = RNG >
00064 class AccessSSkipList
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 AccessSSkipList<K,T,A,Pr,R> container_type;
00081   typedef K key_type;
00083   typedef 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 class AutoAccessSkipList<K,T,A,Pr,R>;
00132   public:
00133     bool operator()(const value_type& left, const value_type& right) const
00134       {return (comp(a(left), a(right))); }
00135   protected:
00136     value_compare(const key_compare &pr) : comp(pr) {}
00137     key_compare comp;
00138     A a;
00139   };
00140 
00141 private:
00142   R rng; 
00143   A a;  
00144   key_compare KeyCompare; 
00145   value_compare ValueCompare; 
00146   unsigned int maxLevel; 
00147   unsigned int level;    
00148   node_type *head;  
00149   node_type *tail; 
00150   double probability; 
00151   size_type items; 
00152   mutable std::pair<size_type,node_type*> *update; 
00153 
00155 
00159   void Init(double probability, unsigned int maxLevel) {}
00160 
00162 
00167   node_type* Alloc(unsigned int level, const T &obj) {}
00168 
00170 
00174   node_type* Alloc(unsigned int level) {}
00175 
00177 
00180   void Free(node_type *item) {}
00181 
00183 
00186   unsigned int GenerateRandomLevel() const {}
00187 
00189   void adjust_levels() {}
00190 
00192 
00198   void scan(const key_type &val) const{}
00199 
00201 
00207   void scan(const value_type &val) const{}
00208 
00210 
00216   void scan(const node_type *nodex) const{}
00217 
00219 
00226   void scan(const iterator &where) const{}
00227 public:
00228 
00230 
00233   class T0 : public std::iterator<std::bidirectional_iterator_tag, value_type>
00234   {
00235   public:
00236     typedef std::iterator<std::bidirectional_iterator_tag, value_type> baseclass;
00237     typedef std::random_acces_iterator_tag iterator_category;
00238     typedef typename baseclass::value_type value_type;
00239     typedef typename baseclass::value_type* pointer;
00240     typedef typename baseclass::value_type& reference;
00241     typedef ptrdiff_t difference_type;
00242 
00243     friend T1;
00244     friend container_type;
00245   private:
00246     container_type *container; 
00247     node_type* node; 
00248   public:
00250     T0() {}
00251 
00253 
00256     T0(const T0 &t0){}
00257 
00259 
00262     T0(const T1 &t1){}
00263 
00265 
00269     T0(container_type *container, node_type* p){}
00270 
00272 
00275     bool operator==(const T0& other) const{}
00276 
00278 
00281     bool operator!=(const T0& other) const{}
00282 
00284 
00287     bool operator==(const T1& other) const{}
00288 
00290 
00293     bool operator!=(const T1& other) const{}
00294 
00296 
00301     T0& operator++(){}
00302 
00304 
00309     T0 operator++(int){}
00310 
00312 
00317     T0& operator--(){}
00318 
00320 
00325     T0 operator--(int){}
00326 
00328 
00333     reference operator*() const{}
00334 
00336 
00341     pointer operator->() const{}
00342 
00344 
00347     bool operator<(const T0 &other) const{}
00348 
00350 
00353     bool operator<=(const T0 &other) const{}
00354 
00356 
00359     bool operator>(const T0 &other) const{}
00360 
00362 
00365     bool operator>=(const T0 &other) const{}
00366 
00368 
00371     bool operator<(const T1 &other) const{}
00372 
00374 
00377     bool operator<=(const T1 &other) const{}
00378 
00380 
00383     bool operator>(const T1 &other) const{}
00384 
00386 
00389     bool operator>=(const T1 &other) const{}
00390   };
00391 
00393 
00396   class T1 : public std::iterator<std::bidirectional_iterator_tag, value_type, ptrdiff_t, const value_type*, const value_type&>
00397   {
00398   public:
00399     typedef std::iterator<std::bidirectional_iterator_tag, value_type> baseclass;
00400     typedef std::random_acces_iterator_tag iterator_category;
00401     typedef typename baseclass::value_type value_type;
00402     typedef typename const baseclass::value_type* pointer;
00403     typedef typename const baseclass::value_type& reference;
00404     typedef ptrdiff_t difference_type;
00405 
00406     friend T0;
00407     friend container_type;
00408   private:
00409     const container_type *container; 
00410     const node_type* node; 
00411   public:
00413     T1() {}
00414 
00416 
00419     T1(const T1 &t1){}
00420 
00422 
00425     T1(const T0 &t0){}
00426 
00428 
00432     T1(container_type *container, node_type* p){}
00433 
00435 
00438     bool operator==(const T0& other) const{}
00439 
00441 
00444     bool operator!=(const T0& other) const{}
00445 
00447 
00450     bool operator==(const T1& other) const{}
00451 
00453 
00456     bool operator!=(const T1& other) const{}
00457 
00459 
00464     T1& operator++(){}
00465 
00467 
00472     T1 operator++(int){}
00473 
00475 
00480     T1& operator--(){}
00481 
00483 
00488     T1 operator--(int){}
00489 
00491 
00496     reference operator*() const{}
00497 
00499 
00504     pointer operator->() const{}
00505 
00507 
00510     bool operator<(const T0 &other) const{}
00511 
00513 
00516     bool operator<=(const T0 &other) const{}
00517 
00519 
00522     bool operator>(const T0 &other) const{}
00523 
00525 
00528     bool operator>=(const T0 &other) const{}
00529 
00531 
00534     bool operator<(const T1 &other) const{}
00535 
00537 
00540     bool operator<=(const T1 &other) const{}
00541 
00543 
00546     bool operator>(const T1 &other) const{}
00547 
00549 
00552     bool operator>=(const T1 &other) const{}
00553   };
00554 
00556 
00560   AccessSSkipList(){}
00561 
00563 
00569   explicit AccessSSkipList(size_type maxNodes){}
00570 
00572 
00576   AccessSSkipList(double probability, unsigned int maxLevel){}
00577 
00579 
00584   AccessSSkipList(const container_type &source){}
00585 
00587 
00594   template<class InIt> AccessSSkipList(InIt first, InIt last){}
00595 
00597 
00603   template<class InIt> AccessSSkipList(InIt first, InIt last, double probability, unsigned int maxLevel){}
00604 
00606 
00614   template<class InIt> AccessSSkipList(InIt first, InIt last, size_type maxNodes){}
00615 
00617 
00623   explicit AccessSSkipList(const key_compare& comp){}
00624 
00626 
00634   template<class InIt> AccessSSkipList(InIt first, InIt last, const key_compare& comp){}
00635 
00637 
00644   template<class InIt> AccessSSkipList(InIt first, InIt last, const key_compare& comp, double probability, unsigned int maxLevel){}
00645 
00647 
00656   template<class InIt> AccessSSkipList(InIt first, InIt last, const key_compare& comp, size_type maxNodes) : Compare(comp){}
00657 
00659 
00662   ~AccessSSkipList(){}
00663 
00664 
00666 
00672   container_type& operator=(const container_type &source){}
00673 
00675 
00678   iterator begin(){}
00679 
00681 
00684   iterator end(){}
00685 
00687 
00690   const_iterator begin() const{}
00691 
00693 
00696   const_iterator end() const{}
00697 
00699 
00702   reverse_iterator rbegin(){}
00703 
00705 
00708   reverse_iterator rend(){}
00709 
00711 
00714   const_reverse_iterator rbegin() const{}
00715 
00717 
00720   const_reverse_iterator rend() const{}
00721 
00723 
00726   size_type size() const{}
00727 
00729 
00732   bool empty() const{}
00733 
00735 
00738   reference front(){}
00739 
00741 
00744   const_reference front() const{}
00745 
00747 
00750   reference back(){}
00751 
00753 
00756   const_reference back() const{}
00757 
00759   void pop_front(){}
00760 
00762   void destroy_front(){}
00763 
00765   void pop_back(){}
00766 
00768   void destroy_back(){}
00769 
00771 
00775   template<class InIt> void assign(InIt first, InIt last){}
00776 
00778 
00788   slpair insert(const value_type& val){}
00789 
00791 
00797   iterator insert(const iterator &where, const value_type& val) {}
00798 
00800 
00804   template<class InIt> void insert(InIt first, InIt last) {}
00805 
00807   void clear(){}
00808 
00810   void destroy(){}
00811 
00813   iterator erase(const iterator &where){}
00814 
00816   iterator destroy(const iterator &where){}
00817 
00819 
00826   iterator erase(const iterator &first, const iterator &last){}
00827 
00829 
00836   iterator destroy(const iterator &first, const iterator &last){}
00837 
00839 
00843   size_type erase(const key_type &keyval){}
00844 
00846 
00850   size_type destroy(const key_type &keyval){}
00851 
00853 
00856   void swap(container_type& right) {}
00857 
00859 
00862   template<class Pr1> void erase_if(Pr1 pred);
00863 
00865 
00868   template<class Pr4> void destroy_if(Pr4 pred);
00869 
00871 
00882   void cut(const iterator &first, const iterator &last, container_type& right);
00883 
00885 
00891   mapped_type_reference operator[](const key_type& key){}
00892 
00894 
00900   const_mapped_type_reference operator[](const key_type& key) const{}
00901 
00903 
00909   mapped_type_reference operator()(const key_type& key){}
00910 
00912 
00918   const_mapped_type_reference operator()(const key_type& key) const{}
00919 
00921   key_compare key_comp() const { }
00922 
00924   value_compare value_comp() const { }
00925 
00927   size_type max_size() const{}
00928 
00930 
00937   const key_type& key(const value_type& value) const {}
00938 
00940 
00947   mapped_type& value(value_type& value) {}
00948 
00950 
00954   iterator find(const key_type& keyval) {}
00955 
00957 
00961   const_iterator find(const key_type& keyval) const {}
00962 
00964 
00968   size_type count(const key_type& keyval) const {}
00969 
00970 
00972 
00976   iterator lower_bound(const key_type& keyval) {}
00977 
00979 
00983   const_iterator lower_bound(const key_type& keyval) const {}
00984 
00986 
00990   iterator upper_bound(const key_type& keyval) {}
00991 
00993 
00997   const_iterator upper_bound(const key_type& keyval) const {}
00998 
01000 
01004   ipair equal_range(const key_type& keyval) {}
01005 
01007 
01011   const_ipair equal_range(const key_type& keyval) const {}
01012 };
01013 
01015 
01020 template <class K, class T, class Pr, class R>
01021 bool operator==(const AccessSSkipList<K,T,A,Pr,R> &left, const AccessSSkipList<K,T,A,Pr,R> &right)
01022 {
01023   return ((left.size() == right.size()) &&
01024           (std::equal(left.begin(), left.end(), right.begin())));
01025 
01026 }
01027 
01029 
01034 template <class K, class T, class Pr, class R>
01035 bool operator!=(const AccessSSkipList<K,T,A,Pr,R> &left, const AccessSSkipList<K,T,A,Pr,R> &right)
01036 {
01037   return !(left==right);
01038 }
01039 
01041 
01046 template <class K, class T, class Pr, class R>
01047 bool operator<(const AccessSSkipList<K,T,A,Pr,R> &left, const AccessSSkipList<K,T,A,Pr,R> &right)
01048 {
01049   return lexicographical_compare(left.begin(),left.end(),right.begin(),right.end(),left.value_comp());
01050 }
01051 
01053 
01058 template <class K, class T, class Pr, class R>
01059 bool operator<=(const AccessSSkipList<K,T,A,Pr,R> &left, const AccessSSkipList<K,T,A,Pr,R> &right)
01060 {
01061   return !(right < left);
01062 }
01063 
01065 
01070 template <class K, class T, class Pr, class R>
01071 bool operator>(const AccessSSkipList<K,T,A,Pr,R> &left, const AccessSSkipList<K,T,A,Pr,R> &right)
01072 {
01073   return (right < left);
01074 }
01075 
01077 
01082 template <class K, class T, class Pr, class R>
01083 bool operator>=(const AccessSSkipList<K,T,A,Pr,R> &left, const AccessSSkipList<K,T,A,Pr,R> &right)
01084 {
01085   return !(left < right);
01086 }
01087 
01088 /*#define csarg1 template <class T, class Pr, class R>
01089 #define csarg2 AccessSSkipList<K,T,A,Pr,R>
01090 CSDefineCompOps(csarg1, csarg2)
01091 #undef csarg1
01092 #undef csarg2
01093 
01094 #undef CSUNIQUE
01095 #define CSUNIQUE(a,b) b
01096 */
01097 
01099 
01154 template <class K, class T, class A=XAccessSelf<K,T>, class Pr = std::less<K>, class R = RNG >
01155 class MultiAccessSSkipList
01156 {
01157 public:
01158   class T0;
01159   class T1;
01160   friend class T0;
01161   friend class T1;
01163   typedef size_t size_type;
01165 
01168   typedef ptrdiff_t difference_type;
01170   typedef MultiAccessSSkipList<K,T,Pr> container_type;
01172   typedef K key_type;
01174   typedef T value_type;
01176   typedef ForwardNode<value_type> node_type;
01178 
01183   typedef T0 iterator;
01185   typedef value_type* pointer;
01187   typedef value_type& reference;
01189   typedef T data_type;
01191   typedef T mapped_type;
01193   typedef T& mapped_type_reference;
01195   typedef const T const_mapped_type;
01197   typedef const T& const_mapped_type_reference;
01199   typedef const T& const_reference;
01201   typedef T1 const_iterator;
01203 
01206   typedef std::reverse_iterator<iterator> reverse_iterator;
01208   typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
01210   typedef std::pair<iterator, iterator> ipair;
01212   typedef std::pair<const_iterator, const_iterator> const_ipair;
01214   typedef Pr key_compare;
01215 
01217   class value_compare
01218     : public std::binary_function<value_type, value_type, bool>
01219   {
01220   friend class AutoAccessSkipList<K,T,A,Pr,R>;
01221   public:
01222     bool operator()(const value_type& left, const value_type& right) const
01223       {return (comp(a(left), a(right))); }
01224   protected:
01225     value_compare(const key_compare &pr) : comp(pr) {}
01226     key_compare comp;
01227     A a;
01228   };
01229 
01230 private:
01231   R rng; 
01232   A a;  
01233   key_compare KeyCompare; 
01234   value_compare ValueCompare; 
01235   unsigned int maxLevel; 
01236   unsigned int level;    
01237   node_type *head;  
01238   node_type *tail; 
01239   double probability; 
01240   size_type items; 
01241   mutable std::pair<size_type,node_type*> *update; 
01242 
01244 
01248   void Init(double probability, unsigned int maxLevel) {}
01249 
01251 
01256   node_type* Alloc(unsigned int level, const T &obj) {}
01257 
01259 
01263   node_type* Alloc(unsigned int level) {}
01264 
01266 
01269   void Free(node_type *item) {}
01270 
01272 
01275   unsigned int GenerateRandomLevel() const {}
01276 
01278   void adjust_levels() {}
01279 
01281 
01287   void scan(const key_type &val) const{}
01288 
01290 
01296   void scan(const value_type &val) const{}
01297 
01299 
01305   void scan(const node_type *nodex) const{}
01306 
01308 
01315   void scan(const iterator &where) const{}
01316 
01317 public:
01319 
01322   class T0 : public std::iterator<std::bidirectional_iterator_tag, value_type>
01323   {
01324   public:
01325     typedef std::iterator<std::bidirectional_iterator_tag, value_type> baseclass;
01326     typedef std::random_acces_iterator_tag iterator_category;
01327     typedef typename baseclass::value_type value_type;
01328     typedef typename baseclass::value_type* pointer;
01329     typedef typename baseclass::value_type& reference;
01330     typedef ptrdiff_t difference_type;
01331 
01332     friend T1;
01333     friend container_type;
01334   private:
01335     container_type *container; 
01336     node_type* node; 
01337   public:
01339     T0() {}
01340 
01342 
01345     T0(const T0 &t0){}
01346 
01348 
01351     T0(const T1 &t1){}
01352 
01354 
01358     T0(container_type *container, node_type* p){}
01359 
01361 
01364     bool operator==(const T0& other) const{}
01365 
01367 
01370     bool operator!=(const T0& other) const{}
01371 
01373 
01376     bool operator==(const T1& other) const{}
01377 
01379 
01382     bool operator!=(const T1& other) const{}
01383 
01385 
01390     T0& operator++(){}
01391 
01393 
01398     T0 operator++(int){}
01399 
01401 
01406     T0& operator--(){}
01407 
01409 
01414     T0 operator--(int){}
01415 
01417 
01422     reference operator*() const{}
01423 
01425 
01430     pointer operator->() 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 T0 &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 
01475 
01478     bool operator>=(const T1 &other) const{}
01479   };
01480 
01482 
01485   class T1 : public std::iterator<std::bidirectional_iterator_tag, value_type, ptrdiff_t, const value_type*, const value_type&>
01486   {
01487   public:
01488     typedef std::iterator<std::bidirectional_iterator_tag, value_type> baseclass;
01489     typedef std::random_acces_iterator_tag iterator_category;
01490     typedef typename baseclass::value_type value_type;
01491     typedef typename const baseclass::value_type* pointer;
01492     typedef typename const baseclass::value_type& reference;
01493     typedef ptrdiff_t difference_type;
01494 
01495     friend T0;
01496     friend container_type;
01497   private:
01498     const container_type *container; 
01499     const node_type* node; 
01500   public:
01502     T1() {}
01503 
01505 
01508     T1(const T1 &t1){}
01509 
01511 
01514     T1(const T0 &t0){}
01515 
01517 
01521     T1(container_type *container, node_type* p){}
01522 
01524 
01527     bool operator==(const T0& other) const{}
01528 
01530 
01533     bool operator!=(const T0& other) const{}
01534 
01536 
01539     bool operator==(const T1& other) const{}
01540 
01542 
01545     bool operator!=(const T1& other) const{}
01546 
01548 
01553     T1& operator++(){}
01554 
01556 
01561     T1 operator++(int){}
01562 
01564 
01569     T1& operator--(){}
01570 
01572 
01577     T1 operator--(int){}
01578 
01580 
01585     reference operator*() const{}
01586 
01588 
01593     pointer operator->() 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 T0 &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 
01638 
01641     bool operator>=(const T1 &other) const{}
01642   };
01643 
01644 
01646 
01650   MultiAccessSSkipList(){}
01651 
01653 
01659   explicit MultiAccessSSkipList(size_type maxNodes){}
01660 
01662 
01666   MultiAccessSSkipList(double probability, unsigned int maxLevel){}
01667 
01669 
01674   MultiAccessSSkipList(const container_type &source){}
01675 
01677 
01684   template<class InIt> MultiAccessSSkipList(InIt first, InIt last){}
01685 
01687 
01693   template<class InIt> MultiAccessSSkipList(InIt first, InIt last, double probability, unsigned int maxLevel){}
01694 
01696 
01704   template<class InIt> MultiAccessSSkipList(InIt first, InIt last, size_type maxNodes){}
01705 
01707 
01713   explicit MultiAccessSSkipList(const key_compare& comp){}
01714 
01716 
01724   template<class InIt> MultiAccessSSkipList(InIt first, InIt last, const key_compare& comp){}
01725 
01727 
01734   template<class InIt> MultiAccessSSkipList(InIt first, InIt last, const key_compare& comp, double probability, unsigned int maxLevel){}
01735 
01737 
01746   template<class InIt> MultiAccessSSkipList(InIt first, InIt last, const key_compare& comp, size_type maxNodes) : Compare(comp){}
01747 
01749 
01752   ~MultiAccessSSkipList(){}
01753 
01754 
01756 
01762   container_type& operator=(const container_type &source){}
01763 
01765 
01768   iterator begin(){}
01769 
01771 
01774   iterator end(){}
01775 
01777 
01780   const_iterator begin() const{}
01781 
01783 
01786   const_iterator end() const{}
01787 
01789 
01792   reverse_iterator rbegin(){}
01793 
01795 
01798   reverse_iterator rend(){}
01799 
01801 
01804   const_reverse_iterator rbegin() const{}
01805 
01807 
01810   const_reverse_iterator rend() const{}
01811 
01813 
01816   size_type size() const{}
01817 
01819 
01822   bool empty() const{}
01823 
01825 
01828   reference front(){}
01829 
01831 
01834   const_reference front() const{}
01835 
01837 
01840   reference back(){}
01841 
01843 
01846   const_reference back() const{}
01847 
01849   void pop_front(){}
01850 
01852   void destroy_front(){}
01853 
01855   void pop_back(){}
01856 
01858   void destroy_back(){}
01859 
01861 
01865   template<class InIt> void assign(InIt first, InIt last){}
01866 
01868 
01872   iterator insert(const value_type& val){}
01873 
01875 
01881   iterator insert(const iterator &where, const value_type& val) {}
01882 
01884 
01888   template<class InIt> void insert(InIt first, InIt last) {}
01889 
01891   void clear(){}
01892 
01894   void destroy(){}
01895 
01897   iterator erase(const iterator &where){}
01898 
01900   iterator destroy(const iterator &where){}
01901 
01903 
01910   iterator erase(const iterator &first, const iterator &last){}
01911 
01913 
01920   iterator destroy(const iterator &first, const iterator &last){}
01921 
01923 
01927   size_type erase(const key_type &keyval){}
01928 
01930 
01934   size_type destroy(const key_type &keyval){}
01935 
01937 
01940   void swap(container_type& right) {}
01941 
01943 
01946   template<class Pr1> void erase_if(Pr1 pred);
01947 
01949 
01952   template<class Pr4> void destroy_if(Pr4 pred);
01953 
01955 
01966   void cut(const iterator &first, const iterator &last, container_type& right);
01967 
01969   key_compare key_comp() const { }
01970 
01972   value_compare value_comp() const { }
01973 
01975   size_type max_size() const{}
01976 
01978 
01985   const key_type& key(const value_type& value) const {}
01986 
01988 
01995   mapped_type& value(value_type& value) {}
01996 
01998 
02002   iterator find(const key_type& keyval) {}
02003 
02005 
02009   const_iterator find(const key_type& keyval) const {}
02010 
02012 
02016   size_type count(const key_type& keyval) const {}
02017 
02018 
02020 
02024   iterator lower_bound(const key_type& keyval) {}
02025 
02027 
02031   const_iterator lower_bound(const key_type& keyval) const {}
02032 
02034 
02038   iterator upper_bound(const key_type& keyval) {}
02039 
02041 
02045   const_iterator upper_bound(const key_type& keyval) const {}
02046 
02048 
02052   ipair equal_range(const key_type& keyval) {}
02053 
02055 
02059   const_ipair equal_range(const key_type& keyval) const {}
02060 };
02061 
02063 
02068 template <class K, class T, class Pr, class R>
02069 bool operator==(const MultiAccessSSkipList<K,T,A,Pr,R> &left, const MultiAccessSSkipList<K,T,A,Pr,R> &right)
02070 {
02071   return ((left.size() == right.size()) &&
02072           (std::equal(left.begin(), left.end(), right.begin())));
02073 }
02074 
02076 
02081 template <class K, class T, class Pr, class R>
02082 bool operator!=(const MultiAccessSSkipList<K,T,A,Pr,R> &left, const MultiAccessSSkipList<K,T,A,Pr,R> &right)
02083 {
02084   return !(left==right);
02085 }
02086 
02088 
02093 template <class K, class T, class Pr, class R>
02094 bool operator<(const MultiAccessSSkipList<K,T,A,Pr,R> &left, const MultiAccessSSkipList<K,T,A,Pr,R> &right)
02095 {
02096   return lexicographical_compare(left.begin(),left.end(),right.begin(),right.end(),left.value_comp());
02097 }
02098 
02100 
02105 template <class K, class T, class Pr, class R>
02106 bool operator<=(const MultiAccessSSkipList<K,T,A,Pr,R> &left, const MultiAccessSSkipList<K,T,A,Pr,R> &right)
02107 {
02108   return !(right < left);
02109 }
02110 
02112 
02117 template <class K, class T, class Pr, class R>
02118 bool operator>(const MultiAccessSSkipList<K,T,A,Pr,R> &left, const MultiAccessSSkipList<K,T,A,Pr,R> &right)
02119 {
02120   return (right < left);
02121 }
02122 
02124 
02129 template <class K, class T, class Pr, class R>
02130 bool operator>=(const MultiAccessSSkipList<K,T,A,Pr,R> &left, const MultiAccessSSkipList<K,T,A,Pr,R> &right)
02131 {
02132   return !(left < right);
02133 }
02134 
02135 
02136 /*#define csarg1 template <class T, class Pr, class R>
02137 #define csarg2 MultiAccessSSkipList<K,T,A,Pr,R>
02138 CSDefineCompOps(csarg1, csarg2)
02139 #undef csarg1
02140 #undef csarg2
02141 */
 All Classes Files Functions Variables Typedefs