Rocstar  1.0
Rocstar multiphysics simulation application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
In_place_list_n.h
Go to the documentation of this file.
1 /* *******************************************************************
2  * Rocstar Simulation Suite *
3  * Copyright@2015, Illinois Rocstar LLC. All rights reserved. *
4  * *
5  * Illinois Rocstar LLC *
6  * Champaign, IL *
7  * www.illinoisrocstar.com *
8  * sales@illinoisrocstar.com *
9  * *
10  * License: See LICENSE file in top level of distribution package or *
11  * http://opensource.org/licenses/NCSA *
12  *********************************************************************/
13 /* *******************************************************************
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, *
15  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES *
16  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND *
17  * NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR *
18  * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *
19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, *
20  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE *
21  * USE OR OTHER DEALINGS WITH THE SOFTWARE. *
22  *********************************************************************/
23 // $Id: In_place_list_n.h,v 1.3 2008/12/06 08:43:27 mtcampbe Exp $
24 
25 // ======================================================================
26 //
27 // Copyright (c) 1997, 1998, 1999 The CGAL Consortium
28 
29 // This software and related documentation is part of the Computational
30 // Geometry Algorithms Library (CGAL).
31 // This software and documentation is provided "as-is" and without warranty
32 // of any kind. In no event shall the CGAL Consortium be liable for any
33 // damage of any kind.
34 //
35 // Every use of CGAL requires a license.
36 //
37 // Academic research and teaching license
38 // - For academic research and teaching purposes, permission to use and copy
39 // the software and its documentation is hereby granted free of charge,
40 // provided that it is not a component of a commercial product, and this
41 // notice appears in all copies of the software and related documentation.
42 //
43 // Commercial licenses
44 // - A commercial license is available through Algorithmic Solutions, who also
45 // markets LEDA (http://www.algorithmic-solutions.de).
46 // - Commercial users may apply for an evaluation license by writing to
47 // Algorithmic Solutions (contact@algorithmic-solutions.com).
48 //
49 // The CGAL Consortium consists of Utrecht University (The Netherlands),
50 // ETH Zurich (Switzerland), Free University of Berlin (Germany),
51 // INRIA Sophia-Antipolis (France), Martin-Luther-University Halle-Wittenberg
52 // (Germany), Max-Planck-Institute Saarbrucken (Germany), RISC Linz (Austria),
53 // and Tel-Aviv University (Israel).
54 //
55 // ----------------------------------------------------------------------
56 //
57 //
58 // release : CGAL-2.1
59 // release_date : 2000, January 11
60 //
61 // file : include/CGAL/In_place_list.h
62 // package : STL_Extension (2.17)
63 // chapter : CGAL_Chapter: STL Extensions for CGAL
64 // source : stl_extension.fw
65 // revision : Revision: 1.10
66 // revision_date : Date: 1999/11/10 13:37:40
67 // author(s) : Michael Hoffmann
68 // Lutz Kettner
69 //
70 // coordinator : INRIA, Sophia Antipolis
71 //
72 // A doubly linked list managing items in place.
73 // email : cgal@cs.uu.nl
74 //
75 // ======================================================================
76 
77 // ======================================================================
78 //
79 // Copyright (c) 2001 Xiangmin Jiao
80 //
81 // This file is modified from CGAL/In_place_list.h to support an
82 // n-dimensional doubly-connected linked list managing items in place
83 // (where inserted items are not copied). This generalized data structure
84 // allows an item to be in multiple In_place_list's at the same time.
85 //
86 // ======================================================================
87 
88 #ifndef RFC_IN_PLACE_LIST_N_H
89 #define RFC_IN_PLACE_LIST_N_H 1
90 
91 #include "rfc_basic.h"
92 #include <iterator>
93 #include <algorithm>
94 #include <cstddef>
95 
97 
98 // Forward declarations
99 template <class T> class _In_place_list_n_iterator;
100 template <class T, bool managed=false> class In_place_list_n;
101 
102 template < class T, int n=1>
105  { for (int i=0; i<n; ++i) {next_link[i]=prev_link[i]=0;} }
106 
107  T* next_link[n]; // forward pointer
108  T* prev_link[n]; // backwards pointer
109 };
110 
111 template <class T>
113 protected:
114  T* node;
115  int dim;
116 public:
117  friend class In_place_list_n<T,false>;
118  friend class In_place_list_n<T,true>;
119 
121 
122  typedef T value_type;
123  typedef T* pointer;
124  typedef T& reference;
125  typedef std::size_t size_type;
126  typedef std::ptrdiff_t difference_type;
127  typedef std::bidirectional_iterator_tag iterator_category;
128 
129  explicit _In_place_list_n_iterator( int d=0) : node(0), dim(d) {}
130  explicit _In_place_list_n_iterator(T* x, int d=0) : node(x), dim(d) {}
131 
132  // Use default copy constructor and copy assignment operator.
133 
134  bool operator==( const Self& x) const { return node == x.node &&dim==x.dim;}
135  bool operator!=( const Self& x) const { return node != x.node ||dim!=x.dim;}
136  T& operator*() const { return *node; }
137  T* operator->() const { return node; }
139  node = node->next_link[dim];
140  return *this;
141  }
143  Self tmp = *this;
144  ++*this;
145  return tmp;
146  }
148  node = node->prev_link[dim];
149  return *this;
150  }
152  Self tmp = *this;
153  --*this;
154  return tmp;
155  }
156 };
157 
158 #ifdef CGAL_CFG_NO_ITERATOR_TRAITS
159 #ifndef CGAL_LIMITED_ITERATOR_TRAITS_SUPPORT
160 template < class T>
161 inline std::bidirectional_iterator_tag
162 iterator_category( const _In_place_list_n_iterator<T>&) {
163  return std::bidirectional_iterator_tag();
164 }
165 template < class T>
166 inline T*
168  return (T*)(0);
169 }
170 template < class T>
171 inline std::ptrdiff_t*
172 distance_type( const _In_place_list_n_iterator<T>&) {
173  return (std::ptrdiff_t*)(0);
174 }
175 #endif // CGAL_LIMITED_ITERATOR_TRAITS_SUPPORT
176 #endif // CGAL_CFG_NO_ITERATOR_TRAITS //
177 
178 template <class T, bool managed>
179 class In_place_list_n {
180 protected:
181  T* node;
182  std::size_t length;
183  int dim;
184 
185  T* get_node() { return new T;}
186  T* get_node(const T& t) { return new T(t);}
187  void put_node(T* p) { delete p;}
188 
189  //
190  // Bidirectional List Managing Objects in Place
191  // --------------------------------------------
192  //
193  // DEFINITION An object of the class In_place_list_n<T,bool> is a
194  // sequence that supports bidirectional iterators and allows constant time
195  // insert and erase operations anywhere within the sequence. The
196  // functionality is similar to the `list<T>' in the STL.
197  //
198  // The In_place_list_n<T,bool> manages element items in place. Two
199  // pointers `T*' are expected in the class. For example the base class
200  // `In_place_list_n_base<T>' can be used.
201  //
202  // The In_place_list_n<T,bool> does not copy element items during
203  // insertion (unless otherwise stated for a function). On removal or
204  // destruction of the list the element items are not deleted by default.
205  // The second template parameter `bool' has to be set to `false' in this
206  // case. If the In_place_list_n<T,bool> should take the responsibility
207  // for the stored objects the `bool' parameter could be set to `true', in
208  // which case the list will delete removed items and will delete all
209  // remaining items on destruction. In any case, the `destroy()' member
210  // function deletes all elements.
211  //
212  // On purpose, these two possible versions of In_place_list_n<T,bool>
213  // are not assignment compatible to avoid confusions between the different
214  // storage responsibilities.
215  //
216  // PARAMETERS
217  //
218  // The full classname is `In_place_list_n<T,bool managed = false, T*
219  // T::*next = &T::next_link, T* T::*prev = &T::prev_link>'. As long as no
220  // default template arguments are supported, only
221  // In_place_list_n<T,bool> is provided.
222  //
223  // TYPES
224 
225 public:
226  typedef T value_type;
227  typedef T* pointer;
228  typedef const T* const_pointer;
229  typedef T& reference;
230  typedef const T& const_reference;
231  typedef std::size_t size_type;
232  typedef std::ptrdiff_t difference_type;
233 
236 
237  typedef std::reverse_iterator<iterator> reverse_iterator;
238  typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
239 
241 
242  // CREATION
243  //
244  // New creation variable is: `l'
245 
246  explicit In_place_list_n( int d=0) : length(0), dim(d) {
247  // introduces an empty list.
248  node = get_node();
249  (*node).next_link[dim] = node;
250  (*node).prev_link[dim] = node;
251  }
252  void set_dimension( int d) { dim = d; }
253 
254  void swap(Self& x) {
255  std::swap(node, x.node);
256  std::swap(length, x.length);
257  std::swap(dim, x.dim);
258  }
259 
260  // ACCESS MEMBER FUNCTIONS
261 
262  iterator begin() { return iterator(node->next_link[dim],dim); }
263  const_iterator begin() const { return const_iterator(node->next_link[dim],dim); }
264  iterator end() { return iterator(node,dim); }
265  const_iterator end() const { return const_iterator(node,dim); }
266 
269  return const_reverse_iterator(end());
270  }
273  return const_reverse_iterator(begin());
274  }
275 
276  bool empty() const { return length == 0; }
277  size_type size() const { return length; }
278  size_type max_size() const { return size_type(-1); }
279 
280  reference front() { return *begin(); }
281  const_reference front() const { return *begin(); }
282  reference back() { return *node->prev_link[dim]; }
283  const_reference back() const { return *node->prev_link[dim]; }
284 
285  // INSERTION
286 
287  iterator insert(iterator position, T& x) {
288  // inserts `t' in front of iterator `pos'. The return value points
289  // to the inserted item.
290  x.next_link[dim] = position.node;
291  x.prev_link[dim] = (*position.node).prev_link[dim];
292  (*((*position.node).prev_link[dim])).next_link[dim] = &x;
293  (*position.node).prev_link[dim] = &x;
294  ++length;
295  return iterator(&x,dim);
296  }
297  iterator insert(T* pos, T& x) {
298  return insert( iterator(pos,dim), x);
299  }
300  void push_front(T& x) { insert(begin(), x); }
301  // inserts an item in front of list `l'.
302 
303  void push_back(T& x) { insert(end(), x); }
304  // inserts an item at the back of list `l'.
305 
306  void insert(iterator position, size_type n);
307  // inserts n copies of `T()' in front of iterator `pos'.
308 
309  void insert(iterator position, size_type n, const T& x);
310  // inserts n copies of `t' in front of iterator `pos'.
311 
312  void insert( T* pos, size_type n) { insert( iterator(pos,dim), n); }
313  void insert( T* pos, size_type n, const T& x = T()) {
314  insert( iterator(pos,dim), n, x);
315  }
316 
317  template <class InputIterator>
318  void insert(iterator pos, InputIterator first, InputIterator last) {
319  // inserts the range [`first, last') in front of iterator `pos'.
320  while (first != last)
321  insert(pos, *get_node(*first++));
322  }
323 
324  template <class InputIterator>
325  void insert(T* pos, InputIterator first, InputIterator last) {
326  // inserts the range [`first, last') in front of iterator `pos'.
327  while (first != last)
328  insert(pos, *get_node(*first++));
329  }
330 
331  void insert(T* pos, const T* first, const T* last) {
332  insert( iterator(pos,dim), const_iterator(first,dim),
333  const_iterator(last,dim));
334  }
335 
336 
337  // REMOVAL
338 
339  void erase(iterator i) {
340  // removes the item from list `l', where `pos' refers to.
341  RFC_assertion( length > 0);
342  (*((*i.node).prev_link[dim])).next_link[dim] = (*i.node).next_link[dim];
343  (*((*i.node).next_link[dim])).prev_link[dim] = (*i.node).prev_link[dim];
344  if (managed)
345  put_node(i.node);
346  --length;
347  }
348  void erase(T* pos) { erase( iterator( pos,dim)); }
349 
350  void pop_front() { erase(begin()); }
351  // removes the first item from list `l'.
352 
353  void pop_back() {
354  // removes the last item from list `l'.
355  iterator tmp = end();
356  erase(--tmp);
357  }
358 
359  void erase(iterator first, iterator last);
360  // removes the items in the range [`first, last') from list `l'.
361 
362  void erase(T* first, T* last) {
363  erase( iterator(first,dim), iterator(last,dim));
364  }
365 
366  void clear() { erase( begin(), end()); }
367 
368  // CREATION (Continued)
369 
370  explicit In_place_list_n(size_type n, const T& value, int d=0) : length(0), dim(d) {
371  // introduces a list with n items, all initialized with copies of
372  // value.
373  node = get_node();
374  (*node).next_link[dim] = node;
375  (*node).prev_link[dim] = node;
376  insert(begin(), n, value);
377  }
378 
379  template <class InputIterator>
380  In_place_list_n( InputIterator first, InputIterator last, int d=0) : length(0), dim(d) {
381  // a list with copies from the range [`first,last').
382  node = get_node();
383  (*node).next_link[dim] = node;
384  (*node).prev_link[dim] = node;
385  insert( begin(), first, last);
386  }
387 
388  In_place_list_n(const T* first, const T* last, int d=0) : length(0), dim(d) {
389  // a list with copies from the range [`first,last').
390  node = get_node();
391  (*node).next_link[dim] = node;
392  (*node).prev_link[dim] = node;
393  insert(begin(), first, last);
394  }
395  In_place_list_n(const Self& x) : length(0), dim(x.dim) {
396  // copy constructor. Each item in `l1' is copied.
397  node = get_node();
398  (*node).next_link[dim] = node;
399  (*node).prev_link[dim] = node;
400  insert(begin(), x.begin(), x.end());
401  }
403  erase(begin(), end());
404  put_node(node);
405  }
406 
407  Self& operator=(const Self& x);
408 
409  void destroy();
410 
411  template <class InputIterator>
412  void assign( InputIterator first, InputIterator last) {
413  erase( begin(), end());
414  insert( begin(), first, last);
415  }
416 
417  void assign( size_type n, const T& t) {
418  erase( begin(), end());
419  insert( begin(), n, t);
420  }
421 
422  void resize( size_type sz, T c = T()) {
423  if ( sz > size())
424  insert( end(), sz - size(), c);
425  else if ( sz < size()) {
426  iterator i = begin();
427  while ( sz-- > 0)
428  ++i;
429  erase( i, end());
430  } // else do nothing
431  }
432 
433  // COMPARISON OPERATIONS
434 
435  bool operator==( const Self& y) const {
436  return size() == y.size() && std::equal(begin(), end(), y.begin());
437  }
438 
439  bool operator!=( const Self& y) const {
440  return size() != y.size() || ! std::equal(begin(),end(),y.begin());
441  }
442 
443  bool operator<(const Self& y) const {
444  return std::lexicographical_compare( begin(),end(),
445  y.begin(),y.end());
446  }
447  bool operator> ( const Self& i) const { return i < *this; }
448  bool operator<=( const Self& i) const { return !(i < *this); }
449  bool operator>=( const Self& i) const { return !(*this < i); }
450 
451  // SPECIAL LIST OPERATIONS
452 
453 protected:
454  void transfer(iterator position, iterator first, iterator last) {
455  // move the range [`first, last') before the position.
456  (*((*last.node).prev_link[dim])).next_link[dim] = position.node;
457  (*((*first.node).prev_link[dim])).next_link[dim] = last.node;
458  (*((*position.node).prev_link[dim])).next_link[dim] = first.node;
459  T* tmp = (*position.node).prev_link[dim];
460  (*position.node).prev_link[dim] = (*last.node).prev_link[dim];
461  (*last.node).prev_link[dim] = (*first.node).prev_link[dim];
462  (*first.node).prev_link[dim] = tmp;
463  }
464 
465 public:
466  void splice(iterator position, Self& x) {
467  // inserts the list x before position `pos' and x becomes empty.
468  // It takes constant time. Precondition: `&l != &x'.
469  if (!x.empty()) {
470  transfer(position, x.begin(), x.end());
471  length += x.length;
472  x.length = 0;
473  }
474  }
475  void splice(T* position, Self& x) {
476  splice( iterator(position,dim), x);
477  }
478  void splice( iterator position, Self& x, iterator i) {
479  // inserts an element pointed to by i from list x before position
480  // `pos' and removes the element from x. It takes constant time. i
481  // is a valid dereferenceable iterator of x. The result is
482  // unchanged if `pos == i' or `pos == ++i'.
483  iterator j = i;
484  if (position == i || position == ++j) return;
485  transfer(position, i, j);
486  ++length;
487  --x.length;
488  }
489  void splice(T* position, Self& x, T* i) {
490  splice( iterator(position,dim), x, iterator(i,dim));
491  }
492  void splice(iterator pos, Self& x, iterator first, iterator last) {
493  // inserts elements in the range [`first, last') before position
494  // `pos' and removes the elements from x. It takes constant time
495  // if `&x == $l'; otherwise, it takes linear time. [`first,
496  // last') is a valid range in x. Precondition: `pos' is not in the
497  // range [`first, last').
498  if (first != last) {
499  if (&x != this) {
500  difference_type n = 0;
501  std::distance(first, last, n);
502  x.length -= n;
503  length += n;
504  }
505  transfer(pos, first, last);
506  }
507  }
508  void splice(T* p, Self& x, T* first, T* last) {
509  splice( iterator(p,dim), x, iterator(first,dim), iterator(last,dim));
510  }
511 
512  void remove(const T& value);
513  // erases all elements e in the list l for which `e == value'.
514  // It is stable. Precondition: a suitable `operator==' for the
515  // type T.
516 
517  void reverse();
518  // reverses the order of the elements in `l' in linear time.
519 
520  void unique();
521  // erases all but the first element from every consecutive group
522  // of equal elements in the list `l'. Precondition: a suitable
523  // `operator==' for the type T.
524 
525  void merge(Self& x);
526  // merges the list x into the list `l' and x becomes empty. It is
527  // stable. Precondition: Both lists are increasingly sorted. A
528  // suitable `operator<' for the type T.
529 
530  void sort();
531  // sorts the list `l' according to the `operator<' in time O(n
532  // log n) where `n = size()'. It is stable. Precondition: a
533  // suitable `operator<' for the type T.
534 };
535 
536 template <class T, bool managed>
538 insert(_In_place_list_n_iterator<T> position, std::size_t n) {
539  while (n--)
540  insert(position, *get_node());
541 }
542 
543 template <class T, bool managed>
545 insert(_In_place_list_n_iterator<T> position, std::size_t n, const T& x) {
546  while (n--)
547  insert(position, *get_node(x));
548 }
549 
550 template <class T, bool managed>
554  while (first != last)
555  erase(first++);
556 }
557 
558 template <class T, bool managed>
562  if (this != &x) {
563  dim = x.dim;
564  iterator first1 = begin();
565  iterator last1 = end();
566  const_iterator first2 = x.begin();
567  const_iterator last2 = x.end();
568  while (first1 != last1 && first2 != last2) {
569  // Save the pointer values before assignment.
570  // Assignment avoids unneccassary delete's and new's.
571  T* tmp1 = (*first1).next_link[dim];
572  T* tmp2 = (*first1).prev_link[dim];
573  *first1 = *first2++;
574  (*first1).next_link[dim] = tmp1;
575  (*first1).prev_link[dim] = tmp2;
576  ++first1;
577  }
578  if (first2 == last2)
579  erase(first1, last1);
580  else
581  insert(last1, first2, last2);
582  }
583  return *this;
584 }
585 
586 template <class T, bool managed>
589  iterator first = begin();
590  iterator last = end();
591  while( first != last) {
592  iterator i = first++;
593  put_node(i.node);
594  }
595  length = 0;
596  (*node).next_link[dim] = node;
597  (*node).prev_link[dim] = node;
598 }
599 
600 template <class T, bool managed>
602  iterator first = begin();
603  iterator last = end();
604  while (first != last) {
605  iterator next = first;
606  ++next;
607  if (*first == value)
608  erase(first);
609  first = next;
610  }
611 }
612 
613 template <class T, bool managed>
615  if (size() < 2) return;
616  for (iterator first = ++begin(); first != end();) {
617  iterator old = first++;
618  transfer(begin(), old, first);
619  }
620 }
621 
622 template <class T, bool managed>
624  iterator first = begin();
625  iterator last = end();
626  if (first == last) return;
627  iterator next = first;
628  while (++next != last) {
629  if (*first == *next)
630  erase(next);
631  else
632  first = next;
633  next = first;
634  }
635 }
636 
637 template <class T, bool managed>
639  iterator first1 = begin();
640  iterator last1 = end();
641  iterator first2 = x.begin();
642  iterator last2 = x.end();
643  while (first1 != last1 && first2 != last2)
644  if (*first2 < *first1) {
645  iterator next = first2;
646  transfer(first1, first2, ++next);
647  first2 = next;
648  } else
649  ++first1;
650  if (first2 != last2)
651  transfer(last1, first2, last2);
652  length += x.length;
653  x.length= 0;
654 }
655 
656 template <class T, bool managed>
658  if (size() < 2) return;
660  In_place_list_n<T,managed> counter[64];
661  int fill = 0;
662  while (!empty()) {
663  carry.splice(carry.begin(), *this, begin());
664  int i = 0;
665  while(i < fill && !counter[i].empty()) {
666  counter[i].merge(carry);
667  carry.swap(counter[i++]);
668  }
669  carry.swap(counter[i]);
670  if (i == fill)
671  ++fill;
672  }
673  for (int i = 1; i < fill; ++i)
674  counter[i].merge(counter[i-1]);
675  swap(counter[fill-1]);
676 }
677 
678 
679 // Undef shorter names (g++/egcs)
680 //#undef _In_place_list_n_iterator
681 
683 #endif // RFC_IN_PLACE_LIST_N_H //
684 // EOF //
685 
686 
687 
688 
689 
690 
void splice(iterator position, Self &x)
_In_place_list_n_iterator< const T > const_iterator
std::reverse_iterator< const_iterator > const_reverse_iterator
void swap(int &a, int &b)
Definition: buildface.cpp:88
bool operator>(const Self &i) const
In_place_list_n(const T *first, const T *last, int d=0)
bool operator!=(const Self &y) const
void transfer(iterator position, iterator first, iterator last)
const_iterator end() const
T * get_node(const T &t)
void insert(T *pos, size_type n)
In_place_list_n(size_type n, const T &value, int d=0)
iterator insert(T *pos, T &x)
size_type max_size() const
const NT & d
void assign(size_type n, const T &t)
void int int REAL REAL * y
Definition: read.cpp:74
void insert(T *pos, InputIterator first, InputIterator last)
const_reference back() const
In_place_list_n(const Self &x)
In_place_list_n(int d=0)
std::reverse_iterator< iterator > reverse_iterator
const T * const_pointer
bool operator!=(const Self &x) const
size_type size() const
void erase(T *pos)
boolean empty(T_VertexSet s)
_In_place_list_n_iterator< T > iterator
void splice(iterator pos, Self &x, iterator first, iterator last)
void assign(InputIterator first, InputIterator last)
void push_back(T &x)
void splice(T *p, Self &x, T *first, T *last)
Definition: adj.h:150
_In_place_list_n_iterator(T *x, int d=0)
In_place_list_n< T, managed > Self
void push_front(T &x)
void set_dimension(int d)
double length(Vector3D *const v, int n)
#define RFC_END_NAME_SPACE
Definition: rfc_basic.h:29
void resize(size_type sz, T c=T())
std::size_t size_type
void insert(T *pos, size_type n, const T &x=T())
void swap(Self &x)
bool empty() const
std::size_t length
void splice(iterator position, Self &x, iterator i)
void put_node(T *p)
blockLoc i
Definition: read.cpp:79
#define RFC_BEGIN_NAME_SPACE
Definition: rfc_basic.h:28
void int int REAL * x
Definition: read.cpp:74
void erase(T *first, T *last)
const NT & n
static bool equal(const Bbox_3 &b1, const Bbox_3 &b2, Real tol_r)
Definition: Overlay_1d.C:87
In_place_list_n(InputIterator first, InputIterator last, int d=0)
reverse_iterator rbegin()
void splice(T *position, Self &x, T *i)
const_reverse_iterator rbegin() const
_In_place_list_n_iterator< T > Self
bool operator>=(const Self &i) const
std::bidirectional_iterator_tag iterator_category
void erase(iterator i)
bool operator<(const Self &y) const
const_iterator begin() const
void remove(const T &value)
const_reverse_iterator rend() const
j indices j
Definition: Indexing.h:6
const_reference front() const
std::ptrdiff_t difference_type
bool operator==(const Self &y) const
const T & const_reference
std::ptrdiff_t difference_type
*********************************************************************Illinois Open Source License ****University of Illinois NCSA **Open Source License University of Illinois All rights reserved ****Developed free of to any person **obtaining a copy of this software and associated documentation to deal with the Software without including without limitation the rights to merge
Definition: roccomf90.h:20
void insert(T *pos, const T *first, const T *last)
bool operator==(const Self &x) const
void merge(Self &x)
iterator insert(iterator position, T &x)
reverse_iterator rend()
#define RFC_assertion
Definition: rfc_basic.h:65
void splice(T *position, Self &x)
reference front()
void insert(iterator pos, InputIterator first, InputIterator last)
bool operator<=(const Self &i) const
Self & operator=(const Self &x)
reference back()