00001
00009
00010
00065 template <class T, class Pr = std::less<T>, class R = RNG >
00066 class AutoSSkipList
00067 {
00068 public:
00069 class T0;
00070 class T1;
00071 friend class T0;
00072 friend class T1;
00074 typedef size_t size_type;
00076
00079 typedef ptrdiff_t difference_type;
00081 typedef T value_type;
00083 typedef ForwardIdxNode<value_type> node_type;
00085 typedef AutoSSkipList<T,Pr,R> container_type;
00087 typedef T key_type;
00089
00094 typedef T0 iterator;
00096 typedef T* pointer;
00098 typedef T& reference;
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;
00127 typedef Pr value_compare;
00128
00129 private:
00130 R rng;
00131 Pr Compare;
00132 unsigned int maxLevel;
00133 unsigned int level;
00134 node_type *head;
00135 node_type *tail;
00136 double probability;
00137 size_type items;
00138 mutable size_type scan_index;
00139 mutable std::pair<size_type,node_type*> *update;
00140
00142
00146 void Init(double probability,unsigned int maxLevel) {}
00147
00149
00154 node_type* Alloc(unsigned int level, const T &obj) {}
00155
00157
00161 node_type* Alloc(unsigned int level) {}
00162
00164
00167 void Free(node_type *item) {}
00168
00170
00173 unsigned int GenerateRandomLevel() const {}
00174
00176 void adjust_levels() {}
00177
00179
00185 void scan(const value_type &val) const{}
00186
00188
00194 void scan(size_type index) const{}
00195
00197
00203 void scan(const node_type *nodex) const{}
00204
00206
00213 void scan(const iterator &where) const{}
00214 public:
00215
00217
00220 class T0 : public std::iterator<std::random_access_iterator_tag, value_type>
00221 {
00222 public:
00223 typedef std::iterator<std::random_access_iterator_tag, value_type> baseclass;
00224 typedef std::random_acces_iterator_tag iterator_category;
00225 typedef typename baseclass::value_type value_type;
00226 typedef typename baseclass::value_type* pointer;
00227 typedef typename baseclass::value_type& reference;
00228 typedef ptrdiff_t difference_type;
00229
00230 friend T1;
00231 friend container_type;
00232 private:
00233 container_type *container;
00234 mutable size_type Findex;
00235 node_type* node;
00236 public:
00238 T0() {}
00239
00241
00244 T0(const T0 &t0){}
00245
00247
00250 T0(const T1 &t1){}
00251
00253
00259 T0(container_type *container, node_type* p){}
00260
00262
00267 T0(container_type *container, node_type* p, size_type index){}
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 value_type& operator*() const{}
00332
00334
00339 value_type* 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
00390
00394 T0 operator+(difference_type off) const{}
00395
00397
00401 T0 operator-(difference_type off) const{}
00402
00404
00408 T0& operator+=(difference_type off){}
00409
00411
00415 T0& operator-=(difference_type off){}
00416
00418
00422 difference_type operator-(const T0 &other) const{}
00423
00425
00429 difference_type operator-(const T1 &other) const{}
00430
00432
00438 int refresh(){}
00439
00441
00445 value_type& operator[](difference_type off) const{}
00446
00448
00451 size_type getIndex() const{}
00452 };
00453
00455
00458 class T1 : public std::iterator<std::random_access_iterator_tag, value_type>
00459 {
00460 public:
00461 typedef std::iterator<std::random_access_iterator_tag, value_type> baseclass;
00462 typedef std::random_acces_iterator_tag iterator_category;
00463 typedef typename baseclass::value_type value_type;
00464 typedef typename const baseclass::value_type* pointer;
00465 typedef typename const baseclass::value_type& reference;
00466 typedef ptrdiff_t difference_type;
00467
00468 friend T0;
00469 friend container_type;
00470 private:
00471 const container_type *container;
00472 mutable size_type Findex;
00473 const node_type* node;
00474 public:
00476 T1() {}
00477
00479
00482 T1(const T1 &t1){}
00483
00485
00488 T1(const T0 &t0){}
00489
00491
00497 T1(container_type *container, node_type* p){}
00498
00500
00505 T1(container_type *container, node_type* p, size_type index){}
00506
00508
00511 bool operator==(const T0& other) const{}
00512
00514
00517 bool operator!=(const T0& other) const{}
00518
00520
00523 bool operator==(const T1& other) const{}
00524
00526
00529 bool operator!=(const T1& other) const{}
00530
00532
00537 T1& operator++(){}
00538
00540
00545 T1 operator++(int){}
00546
00548
00553 T1& operator--(){}
00554
00556
00561 T1 operator--(int){}
00562
00564
00569 value_type& operator*() const{}
00570
00572
00577 value_type* operator->() const{}
00578
00580
00583 bool operator<(const T0 &other) const{}
00584
00586
00589 bool operator<=(const T0 &other) const{}
00590
00592
00595 bool operator>(const T0 &other) const{}
00596
00598
00601 bool operator>=(const T0 &other) const{}
00602
00604
00607 bool operator<(const T1 &other) const{}
00608
00610
00613 bool operator<=(const T1 &other) const{}
00614
00616
00619 bool operator>(const T1 &other) const{}
00620
00622
00625 bool operator>=(const T1 &other) const{}
00626
00628
00632 T1 operator+(difference_type off) const{}
00633
00635
00639 T1 operator-(difference_type off) const{}
00640
00642
00646 T1& operator+=(difference_type off){}
00647
00649
00653 T1& operator-=(difference_type off){}
00654
00656
00660 difference_type operator-(const T0 &other) const{}
00661
00663
00667 difference_type operator-(const T1 &other) const{}
00668
00670
00676 int refresh(){}
00677
00679
00683 value_type& operator[](difference_type off) const{}
00684
00686
00689 size_type getIndex() const{}
00690
00691 };
00692
00694
00698 AutoSSkipList(){}
00699
00701
00707 explicit AutoSSkipList(size_type maxNodes){}
00708
00710
00714 AutoSSkipList(double probability, unsigned int maxLevel){}
00715
00717
00722 AutoSSkipList(const container_type &source){}
00723
00725
00732 template<class InIt> AutoSSkipList(InIt first, InIt last){}
00733
00735
00741 template<class InIt> AutoSSkipList(InIt first, InIt last, double probability, unsigned int maxLevel){}
00742
00744
00752 template<class InIt> AutoSSkipList(InIt first, InIt last, size_type maxNodes){}
00753
00755
00761 explicit AutoSSkipList(const key_compare& comp){}
00762
00764
00772 template<class InIt> AutoSSkipList(InIt first, InIt last, const key_compare& comp){}
00773
00775
00782 template<class InIt> AutoSSkipList(InIt first, InIt last, const key_compare& comp, double probability, unsigned int maxLevel){}
00783
00785
00794 template<class InIt> AutoSSkipList(InIt first, InIt last, const key_compare& comp, size_type maxNodes) : Compare(comp){}
00795
00797
00800 ~AutoSSkipList(){}
00801
00802
00804
00810 container_type& operator=(const container_type &source){}
00811
00813
00816 iterator begin(){}
00817
00819
00822 iterator end(){}
00823
00825
00828 const_iterator begin() const{}
00829
00831
00834 const_iterator end() const{}
00835
00837
00840 reverse_iterator rbegin(){}
00841
00843
00846 reverse_iterator rend(){}
00847
00849
00852 const_reverse_iterator rbegin() const{}
00853
00855
00858 const_reverse_iterator rend() const{}
00859
00861
00864 size_type size() const{}
00865
00867
00870 bool empty() const{}
00871
00873
00876 reference front(){}
00877
00879
00882 const_reference front() const{}
00883
00885
00888 reference back(){}
00889
00891
00894 const_reference back() const{}
00895
00897 void pop_front(){}
00898
00900 void destroy_front(){}
00901
00903 void pop_back(){}
00904
00906 void destroy_back(){}
00907
00909
00913 template<class InIt> void assign(InIt first, InIt last){}
00914
00916
00926 slpair insert(const value_type& val){}
00927
00929
00935 iterator insert(const iterator &where, const value_type& val) {}
00936
00938
00942 template<class InIt> void insert(InIt first, InIt last) {}
00943
00945 void clear(){}
00946
00948 void destroy(){}
00949
00951 iterator erase(const iterator &where){}
00952
00954 iterator destroy(const iterator &where){}
00955
00957
00964 iterator erase(const iterator &first, const iterator &last){}
00965
00967
00974 iterator destroy(const iterator &first, const iterator &last){}
00975
00977
00981 size_type erase(const key_type &keyval){}
00982
00984
00988 size_type destroy(const key_type &keyval){}
00989
00991
00995 iterator erase_index(size_type index);
00996
00998
01002 iterator destroy_index(size_type index);
01003
01005
01008 void swap(container_type& right) {}
01009
01011
01014 template<class Pr1> void erase_if(Pr1 pred);
01015
01017
01020 template<class Pr4> void destroy_if(Pr4 pred);
01021
01023
01034 void cut(const iterator &first, const iterator &last, container_type& right);
01035
01037
01043 mapped_type_reference operator[](size_type index){}
01044
01046
01052 const_mapped_type_reference operator[](size_type index) const{}
01053
01055
01061 mapped_type_reference at(size_type off){}
01062
01064
01070 const_mapped_type_reference at(size_type off) const{}
01071
01073 key_compare key_comp() const { }
01074
01076 value_compare value_comp() const { }
01077
01079 size_type max_size() const{}
01080
01082
01088 const key_type& key(const value_type& value) const {}
01089
01091
01097 mapped_type& value(value_type& value) {}
01098
01100
01104 iterator find(const key_type& keyval) {}
01105
01107
01111 const_iterator find(const key_type& keyval) const {}
01112
01114
01118 size_type count(const key_type& keyval) const {}
01119
01120
01122
01126 iterator lower_bound(const key_type& keyval) {}
01127
01129
01133 const_iterator lower_bound(const key_type& keyval) const {}
01134
01136
01140 iterator upper_bound(const key_type& keyval) {}
01141
01143
01147 const_iterator upper_bound(const key_type& keyval) const {}
01148
01150
01154 ipair equal_range(const key_type& keyval) {}
01155
01157
01161 const_ipair equal_range(const key_type& keyval) const {}
01162 };
01163
01165
01170 template <class T, class Pr, class R>
01171 bool operator==(const AutoSSkipList<T,Pr,R> &left, const AutoSSkipList<T,Pr,R> &right)
01172 {
01173 return ((left.size() == right.size()) &&
01174 (std::equal(left.begin(), left.end(), right.begin())));
01175
01176 }
01177
01179
01184 template <class T, class Pr, class R>
01185 bool operator!=(const AutoSSkipList<T,Pr,R> &left, const AutoSSkipList<T,Pr,R> &right)
01186 {
01187 return !(left==right);
01188 }
01189
01191
01196 template <class T, class Pr, class R>
01197 bool operator<(const AutoSSkipList<T,Pr,R> &left, const AutoSSkipList<T,Pr,R> &right)
01198 {
01199 return lexicographical_compare(left.begin(),left.end(),right.begin(),right.end(),left.value_comp());
01200 }
01201
01203
01208 template <class T, class Pr, class R>
01209 bool operator<=(const AutoSSkipList<T,Pr,R> &left, const AutoSSkipList<T,Pr,R> &right)
01210 {
01211 return !(right < left);
01212 }
01213
01215
01220 template <class T, class Pr, class R>
01221 bool operator>(const AutoSSkipList<T,Pr,R> &left, const AutoSSkipList<T,Pr,R> &right)
01222 {
01223 return (right < left);
01224 }
01225
01227
01232 template <class T, class Pr, class R>
01233 bool operator>=(const AutoSSkipList<T,Pr,R> &left, const AutoSSkipList<T,Pr,R> &right)
01234 {
01235 return !(left < right);
01236 }
01237
01238
01239
01240
01241
01242
01243
01244
01245
01246
01247
01249
01304 template <class T, class Pr = std::less<T>, class R = RNG >
01305 class MultiAutoSSkipList
01306 {
01307 public:
01308 class T0;
01309 class T1;
01310 friend class T0;
01311 friend class T1;
01313 typedef size_t size_type;
01315
01318 typedef ptrdiff_t difference_type;
01320 typedef T value_type;
01322 typedef ForwardIdxNode<value_type> node_type;
01324 typedef MultiAutoSSkipList<T,Pr,R> container_type;
01326 typedef T key_type;
01328
01333 typedef T0 iterator;
01335 typedef T* pointer;
01337 typedef T& reference;
01339 typedef T mapped_type;
01341 typedef T& mapped_type_reference;
01343 typedef const T const_mapped_type;
01345 typedef const T& const_mapped_type_reference;
01347 typedef const T& const_reference;
01349 typedef T1 const_iterator;
01351
01354 typedef std::reverse_iterator<iterator> reverse_iterator;
01356 typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
01358 typedef std::pair<iterator, iterator> ipair;
01360 typedef std::pair<const_iterator, const_iterator> const_ipair;
01362 typedef Pr key_compare;
01364 typedef Pr value_compare;
01365
01366 private:
01367 R rng;
01368 Pr Compare;
01369 unsigned int maxLevel;
01370 unsigned int level;
01371 node_type *head;
01372 node_type *tail;
01373 double probability;
01374 size_type items;
01375 mutable size_type scan_index;
01376 mutable std::pair<size_type,node_type*> *update;
01377
01379
01383 void Init(double probability, unsigned int maxLevel) {}
01384
01386
01391 node_type* Alloc(unsigned int level, const T &obj) {}
01392
01394
01398 node_type* Alloc(unsigned int level) {}
01399
01401
01404 void Free(node_type *item) {}
01405
01407
01410 unsigned int GenerateRandomLevel() const {}
01411
01413 void adjust_levels() {}
01414
01416
01422 void scan(const value_type &val) const{}
01423
01425
01431 void scan(size_type index) const{}
01432
01434
01440 void scan(const node_type *nodex) const{}
01441
01443
01450 void scan(const iterator &where) const{}
01451
01452 public:
01454
01457 class T0 : public std::iterator<std::random_access_iterator_tag, value_type>
01458 {
01459 public:
01460 typedef std::iterator<std::random_access_iterator_tag, value_type> baseclass;
01461 typedef std::random_acces_iterator_tag iterator_category;
01462 typedef typename baseclass::value_type value_type;
01463 typedef typename baseclass::value_type* pointer;
01464 typedef typename baseclass::value_type& reference;
01465 typedef ptrdiff_t difference_type;
01466
01467 friend T1;
01468 friend container_type;
01469 private:
01470 container_type *container;
01471 mutable size_type Findex;
01472 node_type* node;
01473 public:
01475 T0() {}
01476
01478
01481 T0(const T0 &t0){}
01482
01484
01487 T0(const T1 &t1){}
01488
01490
01496 T0(container_type *container, node_type* p){}
01497
01499
01504 T0(container_type *container, node_type* p, size_type index){}
01505
01507
01510 bool operator==(const T0& other) const{}
01511
01513
01516 bool operator!=(const T0& other) const{}
01517
01519
01522 bool operator==(const T1& other) const{}
01523
01525
01528 bool operator!=(const T1& other) const{}
01529
01531
01536 T0& operator++(){}
01537
01539
01544 T0 operator++(int){}
01545
01547
01552 T0& operator--(){}
01553
01555
01560 T0 operator--(int){}
01561
01563
01568 value_type& operator*() const{}
01569
01571
01576 value_type* operator->() const{}
01577
01579
01582 bool operator<(const T0 &other) const{}
01583
01585
01588 bool operator<=(const T0 &other) const{}
01589
01591
01594 bool operator>(const T0 &other) const{}
01595
01597
01600 bool operator>=(const T0 &other) const{}
01601
01603
01606 bool operator<(const T1 &other) const{}
01607
01609
01612 bool operator<=(const T1 &other) const{}
01613
01615
01618 bool operator>(const T1 &other) const{}
01619
01621
01624 bool operator>=(const T1 &other) const{}
01625
01627
01631 T0 operator+(difference_type off) const{}
01632
01634
01638 T0 operator-(difference_type off) const{}
01639
01641
01645 T0& operator+=(difference_type off){}
01646
01648
01652 T0& operator-=(difference_type off){}
01653
01655
01659 difference_type operator-(const T0 &other) const{}
01660
01662
01666 difference_type operator-(const T1 &other) const{}
01667
01669
01675 int refresh(){}
01676
01678
01682 value_type& operator[](difference_type off) const{}
01683
01685
01688 size_type getIndex() const{}
01689 };
01690
01692
01695 class T1 : public std::iterator<std::random_access_iterator_tag, value_type>
01696 {
01697 public:
01698 typedef std::iterator<std::random_access_iterator_tag, value_type> baseclass;
01699 typedef std::random_acces_iterator_tag iterator_category;
01700 typedef typename baseclass::value_type value_type;
01701 typedef typename const baseclass::value_type* pointer;
01702 typedef typename const baseclass::value_type& reference;
01703 typedef ptrdiff_t difference_type;
01704
01705 friend T0;
01706 friend container_type;
01707 private:
01708 const container_type *container;
01709 mutable size_type Findex;
01710 const node_type* node;
01711 public:
01713 T1() {}
01714
01716
01719 T1(const T1 &t1){}
01720
01722
01725 T1(const T0 &t0){}
01726
01728
01734 T1(container_type *container, node_type* p){}
01735
01737
01742 T1(container_type *container, node_type* p, size_type index){}
01743
01745
01748 bool operator==(const T0& other) const{}
01749
01751
01754 bool operator!=(const T0& other) const{}
01755
01757
01760 bool operator==(const T1& other) const{}
01761
01763
01766 bool operator!=(const T1& other) const{}
01767
01769
01774 T1& operator++(){}
01775
01777
01782 T1 operator++(int){}
01783
01785
01790 T1& operator--(){}
01791
01793
01798 T1 operator--(int){}
01799
01801
01806 value_type& operator*() const{}
01807
01809
01814 value_type* operator->() const{}
01815
01817
01820 bool operator<(const T0 &other) const{}
01821
01823
01826 bool operator<=(const T0 &other) const{}
01827
01829
01832 bool operator>(const T0 &other) const{}
01833
01835
01838 bool operator>=(const T0 &other) const{}
01839
01841
01844 bool operator<(const T1 &other) const{}
01845
01847
01850 bool operator<=(const T1 &other) const{}
01851
01853
01856 bool operator>(const T1 &other) const{}
01857
01859
01862 bool operator>=(const T1 &other) const{}
01863
01865
01869 T1 operator+(difference_type off) const{}
01870
01872
01876 T1 operator-(difference_type off) const{}
01877
01879
01883 T1& operator+=(difference_type off){}
01884
01886
01890 T1& operator-=(difference_type off){}
01891
01893
01897 difference_type operator-(const T0 &other) const{}
01898
01900
01904 difference_type operator-(const T1 &other) const{}
01905
01907
01913 int refresh(){}
01914
01916
01920 value_type& operator[](difference_type off) const{}
01921
01923
01926 size_type getIndex() const{}
01927
01928 };
01929
01930
01932
01936 MultiAutoSSkipList(){}
01937
01939
01945 explicit MultiAutoSSkipList(size_type maxNodes){}
01946
01948
01952 MultiAutoSSkipList(double probability, unsigned int maxLevel){}
01953
01955
01960 MultiAutoSSkipList(const container_type &source){}
01961
01963
01970 template<class InIt> MultiAutoSSkipList(InIt first, InIt last){}
01971
01973
01979 template<class InIt> MultiAutoSSkipList(InIt first, InIt last, double probability, unsigned int maxLevel){}
01980
01982
01990 template<class InIt> MultiAutoSSkipList(InIt first, InIt last, size_type maxNodes){}
01991
01993
01999 explicit MultiAutoSSkipList(const key_compare& comp){}
02000
02002
02010 template<class InIt> MultiAutoSSkipList(InIt first, InIt last, const key_compare& comp){}
02011
02013
02020 template<class InIt> MultiAutoSSkipList(InIt first, InIt last, const key_compare& comp, double probability, unsigned int maxLevel){}
02021
02023
02032 template<class InIt> MultiAutoSSkipList(InIt first, InIt last, const key_compare& comp, size_type maxNodes) : Compare(comp){}
02033
02035
02038 ~MultiAutoSSkipList(){}
02039
02040
02042
02048 container_type& operator=(const container_type &source){}
02049
02051
02054 iterator begin(){}
02055
02057
02060 iterator end(){}
02061
02063
02066 const_iterator begin() const{}
02067
02069
02072 const_iterator end() const{}
02073
02075
02078 reverse_iterator rbegin(){}
02079
02081
02084 reverse_iterator rend(){}
02085
02087
02090 const_reverse_iterator rbegin() const{}
02091
02093
02096 const_reverse_iterator rend() const{}
02097
02099
02102 size_type size() const{}
02103
02105
02108 bool empty() const{}
02109
02111
02114 reference front(){}
02115
02117
02120 const_reference front() const{}
02121
02123
02126 reference back(){}
02127
02129
02132 const_reference back() const{}
02133
02135 void pop_front(){}
02136
02138 void destroy_front(){}
02139
02141 void pop_back(){}
02142
02144 void destroy_back(){}
02145
02147
02151 template<class InIt> void assign(InIt first, InIt last){}
02152
02154
02158 iterator insert(const value_type& val){}
02159
02161
02167 iterator insert(const iterator &where, const value_type& val) {}
02168
02170
02174 template<class InIt> void insert(InIt first, InIt last) {}
02175
02177 void clear(){}
02178
02180 void destroy(){}
02181
02183 iterator erase(const iterator &where){}
02184
02186 iterator destroy(const iterator &where){}
02187
02189
02196 iterator erase(const iterator &first, const iterator &last){}
02197
02199
02206 iterator destroy(const iterator &first, const iterator &last){}
02207
02209
02213 size_type erase(const key_type &keyval){}
02214
02216
02220 size_type destroy(const key_type &keyval){}
02221
02223
02227 iterator erase_index(size_type index);
02228
02230
02234 iterator destroy_index(size_type index);
02235
02237
02240 void swap(container_type& right) {}
02241
02243
02246 template<class Pr1> void erase_if(Pr1 pred);
02247
02249
02252 template<class Pr4> void destroy_if(Pr4 pred);
02253
02255
02266 void cut(const iterator &first, const iterator &last, container_type& right);
02267
02269
02275 mapped_type_reference operator[](size_type index){}
02276
02278
02284 const_mapped_type_reference operator[](size_type index) const{}
02285
02287
02293 mapped_type_reference at(size_type off){}
02294
02296
02302 const_mapped_type_reference at(size_type off) const{}
02303
02305 key_compare key_comp() const { }
02306
02308 value_compare value_comp() const { }
02309
02311 size_type max_size() const{}
02312
02314
02320 const key_type& key(const value_type& value) const {}
02321
02323
02329 mapped_type& value(value_type& value) {}
02330
02332
02336 iterator find(const key_type& keyval) {}
02337
02339
02343 const_iterator find(const key_type& keyval) const {}
02344
02346
02350 size_type count(const key_type& keyval) const {}
02351
02352
02354
02358 iterator lower_bound(const key_type& keyval) {}
02359
02361
02365 const_iterator lower_bound(const key_type& keyval) const {}
02366
02368
02372 iterator upper_bound(const key_type& keyval) {}
02373
02375
02379 const_iterator upper_bound(const key_type& keyval) const {}
02380
02382
02386 ipair equal_range(const key_type& keyval) {}
02387
02389
02393 const_ipair equal_range(const key_type& keyval) const {}
02394 };
02395
02397
02402 template <class T, class Pr, class R>
02403 bool operator==(const MultiAutoSSkipList<T,Pr,R> &left, const MultiAutoSSkipList<T,Pr,R> &right)
02404 {
02405 return ((left.size() == right.size()) &&
02406 (std::equal(left.begin(), left.end(), right.begin())));
02407 }
02408
02410
02415 template <class T, class Pr, class R>
02416 bool operator!=(const MultiAutoSSkipList<T,Pr,R> &left, const MultiAutoSSkipList<T,Pr,R> &right)
02417 {
02418 return !(left==right);
02419 }
02420
02422
02427 template <class T, class Pr, class R>
02428 bool operator<(const MultiAutoSSkipList<T,Pr,R> &left, const MultiAutoSSkipList<T,Pr,R> &right)
02429 {
02430 return lexicographical_compare(left.begin(),left.end(),right.begin(),right.end(),left.value_comp());
02431 }
02432
02434
02439 template <class T, class Pr, class R>
02440 bool operator<=(const MultiAutoSSkipList<T,Pr,R> &left, const MultiAutoSSkipList<T,Pr,R> &right)
02441 {
02442 return !(right < left);
02443 }
02444
02446
02451 template <class T, class Pr, class R>
02452 bool operator>(const MultiAutoSSkipList<T,Pr,R> &left, const MultiAutoSSkipList<T,Pr,R> &right)
02453 {
02454 return (right < left);
02455 }
02456
02458
02463 template <class T, class Pr, class R>
02464 bool operator>=(const MultiAutoSSkipList<T,Pr,R> &left, const MultiAutoSSkipList<T,Pr,R> &right)
02465 {
02466 return !(left < right);
02467 }
02468
02469
02470
02471
02472
02473
02474
02475