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
01089
01090
01091
01092
01093
01094
01095
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
02137
02138
02139
02140
02141