00001
00009
00010
00057 template <class K, class T, class Pr = std::less<K>, class R = RNG >
00058 class AutoKeyedSkipList
00059 {
00060 public:
00061 class T0;
00062 class T1;
00063 friend class T0;
00064 friend class T1;
00066 typedef size_t size_type;
00068
00071 typedef ptrdiff_t difference_type;
00073 typedef AutoKeyedSkipList<K,T,Pr,R> container_type;
00075 typedef K key_type;
00077 typedef std::pair<const K, T> value_type;
00079 typedef BidiIdxNode<value_type> node_type;
00081
00086 typedef T0 iterator;
00088 typedef value_type* pointer;
00090 typedef value_type& reference;
00092 typedef T data_type;
00094 typedef T mapped_type;
00096 typedef T& mapped_type_reference;
00098 typedef const T const_mapped_type;
00100 typedef const T& const_mapped_type_reference;
00102 typedef const T& const_reference;
00104 typedef T1 const_iterator;
00106
00109 typedef std::reverse_iterator<iterator> reverse_iterator;
00111 typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
00113 typedef std::pair<iterator, bool> slpair;
00115 typedef std::pair<iterator, iterator> ipair;
00117 typedef std::pair<const_iterator, const_iterator> const_ipair;
00119 typedef Pr key_compare;
00120
00122 class value_compare
00123 : public std::binary_function<value_type, value_type, bool>
00124 {
00125 friend container_type;
00126 public:
00127 bool operator()(const value_type& left, const value_type& right) const
00128 {return (comp(left.first, right.first)); }
00129 protected:
00130 value_compare(const key_compare &pr) : comp(pr) {}
00131 key_compare comp;
00132 };
00133
00134 private:
00135 R rng;
00136 key_compare KeyCompare;
00137 value_compare ValueCompare;
00138 unsigned int maxLevel;
00139 unsigned int level;
00140 node_type *head;
00141 node_type *tail;
00142 double probability;
00143 size_type items;
00144 mutable size_type scan_index;
00145 mutable std::pair<size_type,node_type*> *update;
00146
00148
00152 void Init(double probability,unsigned int maxLevel) {}
00153
00155
00160 node_type* Alloc(unsigned int level, const T &obj) {}
00161
00163
00167 node_type* Alloc(unsigned int level) {}
00168
00170
00173 void Free(node_type *item) {}
00174
00176
00179 unsigned int GenerateRandomLevel() const {}
00180
00182 void adjust_levels() {}
00183
00185
00191 void scan(const key_type &val) const{}
00192
00194
00200 void scan(const value_type &val) const{}
00201
00203
00209 void scan(size_type index) const{}
00210
00212
00218 void scan(const node_type *nodex) const{}
00219
00221
00228 void scan(const iterator &where) const{}
00229 public:
00230
00232
00235 class T0 : public std::iterator<std::random_access_iterator_tag, value_type>
00236 {
00237 public:
00238 typedef std::iterator<std::random_access_iterator_tag, value_type> baseclass;
00239 typedef std::random_acces_iterator_tag iterator_category;
00240 typedef typename baseclass::value_type value_type;
00241 typedef typename baseclass::value_type* pointer;
00242 typedef typename baseclass::value_type& reference;
00243 typedef ptrdiff_t difference_type;
00244
00245 friend T1;
00246 friend container_type;
00247 private:
00248 container_type *container;
00249 mutable size_type Findex;
00250 node_type* node;
00251 public:
00253 T0() {}
00254
00256
00259 T0(const T0 &t0){}
00260
00262
00265 T0(const T1 &t1){}
00266
00268
00274 T0(container_type *container, node_type* p){}
00275
00277
00282 T0(container_type *container, node_type* p, size_type index){}
00283
00285
00288 bool operator==(const T0& other) const{}
00289
00291
00294 bool operator!=(const T0& other) const{}
00295
00297
00300 bool operator==(const T1& other) const{}
00301
00303
00306 bool operator!=(const T1& other) const{}
00307
00309
00314 T0& operator++(){}
00315
00317
00322 T0 operator++(int){}
00323
00325
00330 T0& operator--(){}
00331
00333
00338 T0 operator--(int){}
00339
00341
00346 reference operator*() const{}
00347
00349
00354 pointer operator->() const{}
00355
00357
00360 bool operator<(const T0 &other) const{}
00361
00363
00366 bool operator<=(const T0 &other) const{}
00367
00369
00372 bool operator>(const T0 &other) const{}
00373
00375
00378 bool operator>=(const T0 &other) const{}
00379
00381
00384 bool operator<(const T1 &other) const{}
00385
00387
00390 bool operator<=(const T1 &other) const{}
00391
00393
00396 bool operator>(const T1 &other) const{}
00397
00399
00402 bool operator>=(const T1 &other) const{}
00403
00405
00409 T0 operator+(difference_type off) const{}
00410
00412
00416 T0 operator-(difference_type off) const{}
00417
00419
00423 T0& operator+=(difference_type off){}
00424
00426
00430 T0& operator-=(difference_type off){}
00431
00433
00437 difference_type operator-(const T0 &other) const{}
00438
00440
00444 difference_type operator-(const T1 &other) const{}
00445
00447
00453 int refresh(){}
00454
00456
00460 value_type& operator[](difference_type off) const{}
00461
00463
00466 size_type getIndex() const{}
00467 };
00468
00470
00473 class T1 : public std::iterator<std::random_access_iterator_tag, value_type, ptrdiff_t, const value_type*, const value_type&>
00474 {
00475 public:
00476 typedef std::iterator<std::random_access_iterator_tag, value_type> baseclass;
00477 typedef std::random_acces_iterator_tag iterator_category;
00478 typedef typename baseclass::value_type value_type;
00479 typedef typename const baseclass::value_type* pointer;
00480 typedef typename const baseclass::value_type& reference;
00481 typedef ptrdiff_t difference_type;
00482
00483 friend T0;
00484 friend container_type;
00485 private:
00486 const container_type *container;
00487 mutable size_type Findex;
00488 const node_type* node;
00489 public:
00491 T1() {}
00492
00494
00497 T1(const T1 &t1){}
00498
00500
00503 T1(const T0 &t0){}
00504
00506
00512 T1(container_type *container, node_type* p){}
00513
00515
00520 T1(container_type *container, node_type* p, size_type index){}
00521
00523
00526 bool operator==(const T0& other) const{}
00527
00529
00532 bool operator!=(const T0& other) const{}
00533
00535
00538 bool operator==(const T1& other) const{}
00539
00541
00544 bool operator!=(const T1& other) const{}
00545
00547
00552 T1& operator++(){}
00553
00555
00560 T1 operator++(int){}
00561
00563
00568 T1& operator--(){}
00569
00571
00576 T1 operator--(int){}
00577
00579
00584 reference operator*() const{}
00585
00587
00592 pointer operator->() const{}
00593
00595
00598 bool operator<(const T0 &other) const{}
00599
00601
00604 bool operator<=(const T0 &other) const{}
00605
00607
00610 bool operator>(const T0 &other) const{}
00611
00613
00616 bool operator>=(const T0 &other) const{}
00617
00619
00622 bool operator<(const T1 &other) const{}
00623
00625
00628 bool operator<=(const T1 &other) const{}
00629
00631
00634 bool operator>(const T1 &other) const{}
00635
00637
00640 bool operator>=(const T1 &other) const{}
00641
00643
00647 T1 operator+(difference_type off) const{}
00648
00650
00654 T1 operator-(difference_type off) const{}
00655
00657
00661 T1& operator+=(difference_type off){}
00662
00664
00668 T1& operator-=(difference_type off){}
00669
00671
00675 difference_type operator-(const T0 &other) const{}
00676
00678
00682 difference_type operator-(const T1 &other) const{}
00683
00685
00691 int refresh(){}
00692
00694
00698 value_type& operator[](difference_type off) const{}
00699
00701
00704 size_type getIndex() const{}
00705
00706 };
00707
00709
00713 AutoKeyedSkipList(){}
00714
00716
00722 explicit AutoKeyedSkipList(size_type maxNodes){}
00723
00725
00729 AutoKeyedSkipList(double probability, unsigned int maxLevel){}
00730
00732
00737 AutoKeyedSkipList(const container_type &source){}
00738
00740
00747 template<class InIt> AutoKeyedSkipList(InIt first, InIt last){}
00748
00750
00756 template<class InIt> AutoKeyedSkipList(InIt first, InIt last, double probability, unsigned int maxLevel){}
00757
00759
00767 template<class InIt> AutoKeyedSkipList(InIt first, InIt last, size_type maxNodes){}
00768
00770
00776 explicit AutoKeyedSkipList(const key_compare& comp){}
00777
00779
00787 template<class InIt> AutoKeyedSkipList(InIt first, InIt last, const key_compare& comp){}
00788
00790
00797 template<class InIt> AutoKeyedSkipList(InIt first, InIt last, const key_compare& comp, double probability, unsigned int maxLevel){}
00798
00800
00809 template<class InIt> AutoKeyedSkipList(InIt first, InIt last, const key_compare& comp, size_type maxNodes) : Compare(comp){}
00810
00812
00815 ~AutoKeyedSkipList(){}
00816
00817
00819
00825 container_type& operator=(const container_type &source){}
00826
00828
00831 iterator begin(){}
00832
00834
00837 iterator end(){}
00838
00840
00843 const_iterator begin() const{}
00844
00846
00849 const_iterator end() const{}
00850
00852
00855 reverse_iterator rbegin(){}
00856
00858
00861 reverse_iterator rend(){}
00862
00864
00867 const_reverse_iterator rbegin() const{}
00868
00870
00873 const_reverse_iterator rend() const{}
00874
00876
00879 size_type size() const{}
00880
00882
00885 bool empty() const{}
00886
00888
00891 reference front(){}
00892
00894
00897 const_reference front() const{}
00898
00900
00903 reference back(){}
00904
00906
00909 const_reference back() const{}
00910
00912 void pop_front(){}
00913
00915 void destroy_front(){}
00916
00918 void pop_back(){}
00919
00921 void destroy_back(){}
00922
00924
00928 template<class InIt> void assign(InIt first, InIt last){}
00929
00931
00941 slpair insert(const value_type& val){}
00942
00944
00950 iterator insert(const iterator &where, const value_type& val) {}
00951
00953
00957 template<class InIt> void insert(InIt first, InIt last) {}
00958
00960 void clear(){}
00961
00963 void destroy(){}
00964
00966 iterator erase(const iterator &where){}
00967
00969 iterator destroy(const iterator &where){}
00970
00972
00979 iterator erase(const iterator &first, const iterator &last){}
00980
00982
00989 iterator destroy(const iterator &first, const iterator &last){}
00990
00992
00996 size_type erase(const key_type &keyval){}
00997
00999
01003 size_type destroy(const key_type &keyval){}
01004
01006
01010 iterator erase_index(size_type index);
01011
01013
01017 iterator destroy_index(size_type index);
01018
01020
01023 void swap(container_type& right) {}
01024
01026
01029 template<class Pr1> void erase_if(Pr1 pred);
01030
01032
01035 template<class Pr4> void destroy_if(Pr4 pred);
01036
01038
01049 void cut(const iterator &first, const iterator &last, container_type& right);
01050
01052
01058 mapped_type_reference operator[](size_type index){}
01059
01061
01067 const_mapped_type_reference operator[](size_type index) const{}
01068
01070
01076 mapped_type_reference at(size_type off){}
01077
01079
01085 const_mapped_type_reference at(size_type off) const{}
01086
01088
01094 mapped_type_reference operator[](const key_type& key){}
01095
01097
01103 const_mapped_type_reference operator[](const key_type& key) const{}
01104
01106
01112 mapped_type_reference operator()(const key_type& key){}
01113
01115
01121 const_mapped_type_reference operator()(const key_type& key) const{}
01122
01124 key_compare key_comp() const { }
01125
01127 value_compare value_comp() const { }
01128
01130 size_type max_size() const{}
01131
01133
01139 const key_type& key(const value_type& value) const {}
01140
01142
01148 mapped_type& value(value_type& value) {}
01149
01151
01155 iterator find(const key_type& keyval) {}
01156
01158
01162 const_iterator find(const key_type& keyval) const {}
01163
01165
01169 size_type count(const key_type& keyval) const {}
01170
01171
01173
01177 iterator lower_bound(const key_type& keyval) {}
01178
01180
01184 const_iterator lower_bound(const key_type& keyval) const {}
01185
01187
01191 iterator upper_bound(const key_type& keyval) {}
01192
01194
01198 const_iterator upper_bound(const key_type& keyval) const {}
01199
01201
01205 ipair equal_range(const key_type& keyval) {}
01206
01208
01212 const_ipair equal_range(const key_type& keyval) const {}
01213 };
01214
01216
01221 template <class K, class T, class Pr, class R>
01222 bool operator==(const AutoKeyedSkipList<K,T,Pr,R> &left, const AutoKeyedSkipList<K,T,Pr,R> &right)
01223 {
01224 return ((left.size() == right.size()) &&
01225 (std::equal(left.begin(), left.end(), right.begin())));
01226
01227 }
01228
01230
01235 template <class K, class T, class Pr, class R>
01236 bool operator!=(const AutoKeyedSkipList<K,T,Pr,R> &left, const AutoKeyedSkipList<K,T,Pr,R> &right)
01237 {
01238 return !(left==right);
01239 }
01240
01242
01247 template <class K, class T, class Pr, class R>
01248 bool operator<(const AutoKeyedSkipList<K,T,Pr,R> &left, const AutoKeyedSkipList<K,T,Pr,R> &right)
01249 {
01250 return lexicographical_compare(left.begin(),left.end(),right.begin(),right.end(),left.value_comp());
01251 }
01252
01254
01259 template <class K, class T, class Pr, class R>
01260 bool operator<=(const AutoKeyedSkipList<K,T,Pr,R> &left, const AutoKeyedSkipList<K,T,Pr,R> &right)
01261 {
01262 return !(right < left);
01263 }
01264
01266
01271 template <class K, class T, class Pr, class R>
01272 bool operator>(const AutoKeyedSkipList<K,T,Pr,R> &left, const AutoKeyedSkipList<K,T,Pr,R> &right)
01273 {
01274 return (right < left);
01275 }
01276
01278
01283 template <class K, class T, class Pr, class R>
01284 bool operator>=(const AutoKeyedSkipList<K,T,Pr,R> &left, const AutoKeyedSkipList<K,T,Pr,R> &right)
01285 {
01286 return !(left < right);
01287 }
01288
01289
01290
01291
01292
01293
01294
01295
01296
01297
01298
01300
01347 template <class K, class T, class Pr = std::less<K>, class R = RNG >
01348 class MultiAutoKeyedSkipList
01349 {
01350 public:
01351 class T0;
01352 class T1;
01353 friend class T0;
01354 friend class T1;
01356 typedef size_t size_type;
01358
01361 typedef ptrdiff_t difference_type;
01363 typedef MultiAutoKeyedSkipList<K,T,Pr,R> container_type;
01365 typedef K key_type;
01367 typedef std::pair<const K, T> value_type;
01369 typedef BidiIdxNode<value_type> node_type;
01371
01376 typedef T0 iterator;
01378 typedef value_type* pointer;
01380 typedef value_type& reference;
01382 typedef T data_type;
01384 typedef T mapped_type;
01386 typedef T& mapped_type_reference;
01388 typedef const T const_mapped_type;
01390 typedef const T& const_mapped_type_reference;
01392 typedef const T& const_reference;
01394 typedef T1 const_iterator;
01396
01399 typedef std::reverse_iterator<iterator> reverse_iterator;
01401 typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
01403 typedef std::pair<iterator, iterator> ipair;
01405 typedef std::pair<const_iterator, const_iterator> const_ipair;
01407 typedef Pr key_compare;
01408
01410 class value_compare
01411 : public std::binary_function<value_type, value_type, bool>
01412 {
01413 friend container_type;
01414 public:
01415 bool operator()(const value_type& left, const value_type& right) const
01416 {return (comp(left.first, right.first)); }
01417 protected:
01418 value_compare(const key_compare &pr) : comp(pr) {}
01419 key_compare comp;
01420 };
01421
01422 private:
01423 R rng;
01424 key_compare KeyCompare;
01425 value_compare ValueCompare;
01426 unsigned int maxLevel;
01427 unsigned int level;
01428 node_type *head;
01429 node_type *tail;
01430 double probability;
01431 size_type items;
01432 mutable size_type scan_index;
01433 mutable std::pair<size_type,node_type*> *update;
01434
01436
01440 void Init(double probability,unsigned int maxLevel) {}
01441
01443
01448 node_type* Alloc(unsigned int level, const T &obj) {}
01449
01451
01455 node_type* Alloc(unsigned int level) {}
01456
01458
01461 void Free(node_type *item) {}
01462
01464
01467 unsigned int GenerateRandomLevel() const {}
01468
01470 void adjust_levels() {}
01471
01473
01479 void scan(const key_type &val) const{}
01480
01482
01488 void scan(const value_type &val) const{}
01489
01491
01497 void scan(size_type index) const{}
01498
01500
01506 void scan(const node_type *nodex) const{}
01507
01509
01516 void scan(const iterator &where) const{}
01517
01518 public:
01520
01523 class T0 : public std::iterator<std::random_access_iterator_tag, value_type, ptrdiff_t, const value_type*, const value_type&>
01524 {
01525 public:
01526 typedef std::iterator<std::random_access_iterator_tag, value_type> baseclass;
01527 typedef std::random_acces_iterator_tag iterator_category;
01528 typedef typename baseclass::value_type value_type;
01529 typedef typename baseclass::value_type* pointer;
01530 typedef typename baseclass::value_type& reference;
01531 typedef ptrdiff_t difference_type;
01532
01533 friend T1;
01534 friend container_type;
01535 private:
01536 container_type *container;
01537 mutable size_type Findex;
01538 node_type* node;
01539 public:
01541 T0() {}
01542
01544
01547 T0(const T0 &t0){}
01548
01550
01553 T0(const T1 &t1){}
01554
01556
01562 T0(container_type *container, node_type* p){}
01563
01565
01570 T0(container_type *container, node_type* p, size_type index){}
01571
01573
01576 bool operator==(const T0& other) const{}
01577
01579
01582 bool operator!=(const T0& other) const{}
01583
01585
01588 bool operator==(const T1& other) const{}
01589
01591
01594 bool operator!=(const T1& other) const{}
01595
01597
01602 T0& operator++(){}
01603
01605
01610 T0 operator++(int){}
01611
01613
01618 T0& operator--(){}
01619
01621
01626 T0 operator--(int){}
01627
01629
01634 reference operator*() const{}
01635
01637
01642 pointer operator->() const{}
01643
01645
01648 bool operator<(const T0 &other) const{}
01649
01651
01654 bool operator<=(const T0 &other) const{}
01655
01657
01660 bool operator>(const T0 &other) const{}
01661
01663
01666 bool operator>=(const T0 &other) const{}
01667
01669
01672 bool operator<(const T1 &other) const{}
01673
01675
01678 bool operator<=(const T1 &other) const{}
01679
01681
01684 bool operator>(const T1 &other) const{}
01685
01687
01690 bool operator>=(const T1 &other) const{}
01691
01693
01697 T0 operator+(difference_type off) const{}
01698
01700
01704 T0 operator-(difference_type off) const{}
01705
01707
01711 T0& operator+=(difference_type off){}
01712
01714
01718 T0& operator-=(difference_type off){}
01719
01721
01725 difference_type operator-(const T0 &other) const{}
01726
01728
01732 difference_type operator-(const T1 &other) const{}
01733
01735
01741 int refresh(){}
01742
01744
01748 value_type& operator[](difference_type off) const{}
01749
01751
01754 size_type getIndex() const{}
01755 };
01756
01758
01761 class T1 : public std::iterator<std::random_access_iterator_tag, value_type, ptrdiff_t, const value_type*, const value_type&>
01762 {
01763 public:
01764 typedef std::iterator<std::random_access_iterator_tag, value_type> baseclass;
01765 typedef std::random_acces_iterator_tag iterator_category;
01766 typedef typename baseclass::value_type value_type;
01767 typedef typename const baseclass::value_type* pointer;
01768 typedef typename const baseclass::value_type& reference;
01769 typedef ptrdiff_t difference_type;
01770
01771 friend T0;
01772 friend container_type;
01773 private:
01774 const container_type *container;
01775 mutable size_type Findex;
01776 const node_type* node;
01777 public:
01779 T1() {}
01780
01782
01785 T1(const T1 &t1){}
01786
01788
01791 T1(const T0 &t0){}
01792
01794
01800 T1(container_type *container, node_type* p){}
01801
01803
01808 T1(container_type *container, node_type* p, size_type index){}
01809
01811
01814 bool operator==(const T0& other) const{}
01815
01817
01820 bool operator!=(const T0& other) const{}
01821
01823
01826 bool operator==(const T1& other) const{}
01827
01829
01832 bool operator!=(const T1& other) const{}
01833
01835
01840 T1& operator++(){}
01841
01843
01848 T1 operator++(int){}
01849
01851
01856 T1& operator--(){}
01857
01859
01864 T1 operator--(int){}
01865
01867
01872 reference operator*() const{}
01873
01875
01880 pointer operator->() const{}
01881
01883
01886 bool operator<(const T0 &other) const{}
01887
01889
01892 bool operator<=(const T0 &other) const{}
01893
01895
01898 bool operator>(const T0 &other) const{}
01899
01901
01904 bool operator>=(const T0 &other) const{}
01905
01907
01910 bool operator<(const T1 &other) const{}
01911
01913
01916 bool operator<=(const T1 &other) const{}
01917
01919
01922 bool operator>(const T1 &other) const{}
01923
01925
01928 bool operator>=(const T1 &other) const{}
01929
01931
01935 T1 operator+(difference_type off) const{}
01936
01938
01942 T1 operator-(difference_type off) const{}
01943
01945
01949 T1& operator+=(difference_type off){}
01950
01952
01956 T1& operator-=(difference_type off){}
01957
01959
01963 difference_type operator-(const T0 &other) const{}
01964
01966
01970 difference_type operator-(const T1 &other) const{}
01971
01973
01979 int refresh(){}
01980
01982
01986 value_type& operator[](difference_type off) const{}
01987
01989
01992 size_type getIndex() const{}
01993
01994 };
01995
01996
01998
02002 MultiAutoKeyedSkipList(){}
02003
02005
02011 explicit MultiAutoKeyedSkipList(size_type maxNodes){}
02012
02014
02018 MultiAutoKeyedSkipList(double probability, unsigned int maxLevel){}
02019
02021
02026 MultiAutoKeyedSkipList(const container_type &source){}
02027
02029
02036 template<class InIt> MultiAutoKeyedSkipList(InIt first, InIt last){}
02037
02039
02045 template<class InIt> MultiAutoKeyedSkipList(InIt first, InIt last, double probability, unsigned int maxLevel){}
02046
02048
02056 template<class InIt> MultiAutoKeyedSkipList(InIt first, InIt last, size_type maxNodes){}
02057
02059
02065 explicit MultiAutoKeyedSkipList(const key_compare& comp){}
02066
02068
02076 template<class InIt> MultiAutoKeyedSkipList(InIt first, InIt last, const key_compare& comp){}
02077
02079
02086 template<class InIt> MultiAutoKeyedSkipList(InIt first, InIt last, const key_compare& comp, double probability, unsigned int maxLevel){}
02087
02089
02098 template<class InIt> MultiAutoKeyedSkipList(InIt first, InIt last, const key_compare& comp, size_type maxNodes) : Compare(comp){}
02099
02101
02104 ~MultiAutoKeyedSkipList(){}
02105
02106
02108
02114 container_type& operator=(const container_type &source){}
02115
02117
02120 iterator begin(){}
02121
02123
02126 iterator end(){}
02127
02129
02132 const_iterator begin() const{}
02133
02135
02138 const_iterator end() const{}
02139
02141
02144 reverse_iterator rbegin(){}
02145
02147
02150 reverse_iterator rend(){}
02151
02153
02156 const_reverse_iterator rbegin() const{}
02157
02159
02162 const_reverse_iterator rend() const{}
02163
02165
02168 size_type size() const{}
02169
02171
02174 bool empty() const{}
02175
02177
02180 reference front(){}
02181
02183
02186 const_reference front() const{}
02187
02189
02192 reference back(){}
02193
02195
02198 const_reference back() const{}
02199
02201 void pop_front(){}
02202
02204 void destroy_front(){}
02205
02207 void pop_back(){}
02208
02210 void destroy_back(){}
02211
02213
02217 template<class InIt> void assign(InIt first, InIt last){}
02218
02220
02224 iterator insert(const value_type& val){}
02225
02227
02233 iterator insert(const iterator &where, const value_type& val) {}
02234
02236
02240 template<class InIt> void insert(InIt first, InIt last) {}
02241
02243 void clear(){}
02244
02246 void destroy(){}
02247
02249 iterator erase(const iterator &where){}
02250
02252 iterator destroy(const iterator &where){}
02253
02255
02262 iterator erase(const iterator &first, const iterator &last){}
02263
02265
02272 iterator destroy(const iterator &first, const iterator &last){}
02273
02275
02279 size_type erase(const key_type &keyval){}
02280
02282
02286 size_type destroy(const key_type &keyval){}
02287
02289
02293 iterator erase_index(size_type index);
02294
02296
02300 iterator destroy_index(size_type index);
02301
02303
02306 void swap(container_type& right) {}
02307
02309
02312 template<class Pr1> void erase_if(Pr1 pred);
02313
02315
02318 template<class Pr4> void destroy_if(Pr4 pred);
02319
02321
02332 void cut(const iterator &first, const iterator &last, container_type& right);
02333
02335
02341 mapped_type_reference operator[](size_type index){}
02342
02344
02350 const_mapped_type_reference operator[](size_type index) const{}
02351
02353
02359 mapped_type_reference at(size_type off){}
02360
02362
02368 const_mapped_type_reference at(size_type off) const{}
02369
02371 key_compare key_comp() const { }
02372
02374 value_compare value_comp() const { }
02375
02377 size_type max_size() const{}
02378
02380
02386 const key_type& key(const value_type& value) const {}
02387
02389
02395 mapped_type& value(value_type& value) {}
02396
02398
02402 iterator find(const key_type& keyval) {}
02403
02405
02409 const_iterator find(const key_type& keyval) const {}
02410
02412
02416 size_type count(const key_type& keyval) const {}
02417
02418
02420
02424 iterator lower_bound(const key_type& keyval) {}
02425
02427
02431 const_iterator lower_bound(const key_type& keyval) const {}
02432
02434
02438 iterator upper_bound(const key_type& keyval) {}
02439
02441
02445 const_iterator upper_bound(const key_type& keyval) const {}
02446
02448
02452 ipair equal_range(const key_type& keyval) {}
02453
02455
02459 const_ipair equal_range(const key_type& keyval) const {}
02460 };
02461
02463
02468 template <class K, class T, class Pr, class R>
02469 bool operator==(const MultiAutoKeyedSkipList<K,T,Pr,R> &left, const MultiAutoKeyedSkipList<K,T,Pr,R> &right)
02470 {
02471 return ((left.size() == right.size()) &&
02472 (std::equal(left.begin(), left.end(), right.begin())));
02473 }
02474
02476
02481 template <class K, class T, class Pr, class R>
02482 bool operator!=(const MultiAutoKeyedSkipList<K,T,Pr,R> &left, const MultiAutoKeyedSkipList<K,T,Pr,R> &right)
02483 {
02484 return !(left==right);
02485 }
02486
02488
02493 template <class K, class T, class Pr, class R>
02494 bool operator<(const MultiAutoKeyedSkipList<K,T,Pr,R> &left, const MultiAutoKeyedSkipList<K,T,Pr,R> &right)
02495 {
02496 return lexicographical_compare(left.begin(),left.end(),right.begin(),right.end(),left.value_comp());
02497 }
02498
02500
02505 template <class K, class T, class Pr, class R>
02506 bool operator<=(const MultiAutoKeyedSkipList<K,T,Pr,R> &left, const MultiAutoKeyedSkipList<K,T,Pr,R> &right)
02507 {
02508 return !(right < left);
02509 }
02510
02512
02517 template <class K, class T, class Pr, class R>
02518 bool operator>(const MultiAutoKeyedSkipList<K,T,Pr,R> &left, const MultiAutoKeyedSkipList<K,T,Pr,R> &right)
02519 {
02520 return (right < left);
02521 }
02522
02524
02529 template <class K, class T, class Pr, class R>
02530 bool operator>=(const MultiAutoKeyedSkipList<K,T,Pr,R> &left, const MultiAutoKeyedSkipList<K,T,Pr,R> &right)
02531 {
02532 return !(left < right);
02533 }
02534
02535
02536
02537
02538
02539
02540
02541