1#ifndef INCLUDES_MYSQL_SQL_LIST_H
2#define INCLUDES_MYSQL_SQL_LIST_H
220 if (!
list->is_empty()) {
238 while (node && node != list_first) {
247 if (!
list->is_empty()) {
276#ifdef LIST_EXTRA_DEBUG
292 bool check_list(
const char *
name) {
300 (
"%s: error: NULL element in the list",
name));
307 DBUG_PRINT(
"list_invariants", (
"%s: error: wrong last pointer",
name));
311 DBUG_PRINT(
"list_invariants", (
"%s: error: wrong element count",
name));
322 node->
next = new_node;
328 if (!new_node)
return true;
330 node->
next = new_node;
471 next = element->
next;
472 delete (T *)element->
info;
480 next = element->
next;
489 for (uint i = 0; i < index; ++i) current = current->
next;
490 return static_cast<T *
>(current->
info);
496 for (uint i = 0; i < index; ++i) current = current->
next;
497 current->
info = new_value;
501 if (index1 == index2)
return false;
505 if (index2 < index1)
std::swap(index1, index2);
508 for (uint i = 0; i < index1; ++i) current1 = current1->
next;
511 for (uint i = 0; i < index2 - index1; ++i) current2 = current2->
next;
532 template <
typename Node_cmp_func>
537 if (
cmp(
static_cast<T *
>(n1->info),
static_cast<T *
>(n2->info)) > 0) {
538 void *tmp = n1->info;
587 return const_cast<T **
>(
599 inline T **
ref(
void) {
return (T **)0; }
644 return !(*
this == other);
711 :
key(key_arg),
val(val_arg) {}
722 static_assert(!std::is_polymorphic<T>::value,
723 "Do not use this for classes with virtual members");
740 first->prev = &a->next;
749 a->next =
static_cast<T *
>(&
sentinel);
757 T *first_link =
first;
758 first_link->unlink();
803 if (
current ==
static_cast<T *
>(&
list->sentinel))
return nullptr;
Kerberos Client Authentication nullptr
Definition: auth_kerberos_client_plugin.cc:250
Definition: sql_list.h:825
I_List_iterator(I_List< T > &a)
Definition: sql_list.h:827
T * operator++(int)
Definition: sql_list.h:828
Definition: sql_list.h:810
void move_elements_to(I_List< T > *new_owner)
Definition: sql_list.h:818
Definition: sql_list.h:619
T & operator*() const
Definition: sql_list.h:624
T * operator->() const
Definition: sql_list.h:647
T value_type
Definition: sql_list.h:632
bool operator==(const List_STL_Iterator &other) const
Definition: sql_list.h:638
List_STL_Iterator()=default
std::forward_iterator_tag iterator_category
Definition: sql_list.h:635
list_node * m_current
Definition: sql_list.h:660
T * pointer
Definition: sql_list.h:633
List_STL_Iterator(list_node *node)
Definition: sql_list.h:621
T & reference
Definition: sql_list.h:634
List_STL_Iterator & operator++()
Definition: sql_list.h:626
List_STL_Iterator operator++(int)
Definition: sql_list.h:653
bool operator!=(const List_STL_Iterator &other) const
Definition: sql_list.h:643
ptrdiff_t difference_type
Definition: sql_list.h:631
Definition: sql_list.h:593
T * replace(T *)
Definition: sql_list.h:595
List_iterator_fast(List< T > &a)
Definition: sql_list.h:602
void after(T *)
Definition: sql_list.h:598
void remove(void)
Definition: sql_list.h:597
T ** ref(void)
Definition: sql_list.h:599
void sublist(List< T > &list_arg, uint el_arg)
Definition: sql_list.h:607
void init(List< T > &a)
Definition: sql_list.h:604
void rewind(void)
Definition: sql_list.h:606
T * operator++(int)
Definition: sql_list.h:605
T * replace(List< T > &)
Definition: sql_list.h:596
List_iterator_fast()
Definition: sql_list.h:603
Definition: sql_list.h:572
List_iterator()
Definition: sql_list.h:575
void init(List< T > &a)
Definition: sql_list.h:576
T ** ref(void)
Definition: sql_list.h:586
void after(T *a)
Definition: sql_list.h:582
T * replace(List< T > &a)
Definition: sql_list.h:579
T * replace(T *a)
Definition: sql_list.h:578
T * operator++(int)
Definition: sql_list.h:577
bool after(T *a, MEM_ROOT *mem_root)
Definition: sql_list.h:583
void remove()
Definition: sql_list.h:581
void rewind(void)
Definition: sql_list.h:580
List_iterator(List< T > &a)
Definition: sql_list.h:574
Definition: sql_list.h:433
bool push_back(T *a, MEM_ROOT *mem_root)
Definition: sql_list.h:450
iterator begin()
Definition: sql_list.h:548
const_iterator begin() const
Definition: sql_list.h:559
const_iterator cend() const
Definition: sql_list.h:565
void delete_elements(void)
Definition: sql_list.h:468
const T * head() const
Definition: sql_list.h:460
List_STL_Iterator< const T > const_iterator
Definition: sql_list.h:558
void destroy_elements(void)
Definition: sql_list.h:477
List()
Definition: sql_list.h:435
List(const List< T > &tmp, MEM_ROOT *mem_root)
Definition: sql_list.h:440
void sort(Node_cmp_func cmp)
Sort the list.
Definition: sql_list.h:533
bool swap_elts(uint index1, uint index2)
Definition: sql_list.h:500
T * head()
Definition: sql_list.h:459
void disjoin(List< T > *list)
Definition: sql_list.h:466
bool push_back(T *a)
Definition: sql_list.h:447
List_STL_Iterator< T > iterator
Definition: sql_list.h:547
const_iterator end() const
Definition: sql_list.h:560
bool push_front(T *a, MEM_ROOT *mem_root)
Definition: sql_list.h:456
List(const List< T > &tmp)
Definition: sql_list.h:436
List & operator=(const List &tmp)
Definition: sql_list.h:437
T ** head_ref()
Definition: sql_list.h:463
T * operator[](uint index) const
Definition: sql_list.h:486
const_iterator cbegin() const
Definition: sql_list.h:564
iterator end()
Definition: sql_list.h:549
void prepend(List< T > *list)
Definition: sql_list.h:467
T * pop()
Definition: sql_list.h:464
bool push_front(T *a)
Definition: sql_list.h:453
void replace(uint index, T *new_value)
Definition: sql_list.h:493
void concat(List< T > *list)
Definition: sql_list.h:465
Simple intrusive linked list.
Definition: sql_list.h:45
void save_and_clear(SQL_I_List< T > *save)
Definition: sql_list.h:75
T * first
The first element in the list.
Definition: sql_list.h:49
void push_front(SQL_I_List< T > *save)
Definition: sql_list.h:80
void push_back(SQL_I_List< T > *save)
Definition: sql_list.h:87
void link_in_list(T *element, T **next_ptr)
Definition: sql_list.h:68
uint elements
Definition: sql_list.h:47
SQL_I_List()
Definition: sql_list.h:53
T ** next
A reference to the next element in the list.
Definition: sql_list.h:51
SQL_I_List & operator=(SQL_I_List &)=default
uint size() const
Definition: sql_list.h:95
void clear()
Definition: sql_list.h:62
SQL_I_List(const SQL_I_List &tmp)
Definition: sql_list.h:55
SQL_I_List(SQL_I_List &&)=default
SQL_I_List & operator=(SQL_I_List &&)=default
Definition: sql_list.h:791
T * current
Definition: sql_list.h:793
T * next(void) SUPPRESS_UBSAN
Definition: sql_list.h:800
base_ilist_iterator(base_ilist< T > &list_par)
Definition: sql_list.h:796
base_ilist< T > * list
Definition: sql_list.h:792
T ** el
Definition: sql_list.h:793
Definition: sql_list.h:718
T * get()
Definition: sql_list.h:755
void operator=(const base_ilist &)
void move_elements_to(base_ilist *new_owner)
Moves list elements to new owner, and empties current owner (i.e.
Definition: sql_list.h:771
T * first
Definition: sql_list.h:719
bool is_empty() const SUPPRESS_UBSAN
Definition: sql_list.h:734
void clear() SUPPRESS_UBSAN
Definition: sql_list.h:727
T * head()
Definition: sql_list.h:762
base_ilist(const base_ilist &)
void push_front(T *a)
Pushes new element in front of list.
Definition: sql_list.h:739
void push_back(T *a)
Pushes new element to the end of the list, i.e. in front of the sentinel.
Definition: sql_list.h:747
ilink< T > sentinel
Definition: sql_list.h:720
base_ilist()
Definition: sql_list.h:731
Definition: sql_list.h:338
void init(base_list &list_par)
Definition: sql_list.h:354
list_node ** prev
Definition: sql_list.h:341
void * next_fast(void)
Definition: sql_list.h:367
void ** ref(void)
Definition: sql_list.h:411
bool is_last(void)
Definition: sql_list.h:415
bool is_before_first() const
Definition: sql_list.h:416
void after(void *element)
Definition: sql_list.h:398
list_node ** el
Definition: sql_list.h:341
void * replace(void *element)
Definition: sql_list.h:374
void sublist(base_list &ls, uint elm)
Definition: sql_list.h:342
base_list_iterator()
Definition: sql_list.h:349
friend class error_list_iterator
Definition: sql_list.h:426
base_list_iterator(base_list &list_par)
Definition: sql_list.h:352
void rewind(void)
Definition: sql_list.h:373
list_node * current
Definition: sql_list.h:341
base_list * list
Definition: sql_list.h:340
void remove(void)
Definition: sql_list.h:392
bool prepend(void *a, MEM_ROOT *mem_root)
Definition: sql_list.h:417
bool after(void *a, MEM_ROOT *mem_root)
Definition: sql_list.h:404
void * replace(base_list &new_list)
Definition: sql_list.h:380
void * next(void)
Definition: sql_list.h:361
Definition: sql_list.h:130
bool push_back(void *info)
Definition: sql_list.h:171
void ** head_ref()
Definition: sql_list.h:266
list_node * last_ref()
Definition: sql_list.h:270
void disjoin(base_list *list)
Definition: sql_list.h:233
base_list(const base_list &tmp)
This is a shallow copy constructor that implicitly passes the ownership from the source list to the n...
Definition: sql_list.h:156
void concat(base_list *list)
Definition: sql_list.h:219
friend class error_list
Definition: sql_list.h:273
list_node * first_node()
Definition: sql_list.h:263
bool push_front(void *info)
Definition: sql_list.h:189
void * pop(void)
Definition: sql_list.h:226
uint size() const
Definition: sql_list.h:271
base_list()
Definition: sql_list.h:146
void swap(base_list &rhs)
Swap two lists.
Definition: sql_list.h:257
bool push_back(void *info, MEM_ROOT *mem_root)
Definition: sql_list.h:180
const void * head() const
Definition: sql_list.h:265
friend class error_list_iterator
Definition: sql_list.h:274
void after(void *info, list_node *node)
Definition: sql_list.h:320
list_node * last_node()
Definition: sql_list.h:262
bool is_empty() const
Definition: sql_list.h:269
void * head()
Definition: sql_list.h:264
bool operator==(const base_list &rhs) const
Definition: sql_list.h:137
void prepend(base_list *list)
Definition: sql_list.h:246
void remove(list_node **prev)
Definition: sql_list.h:210
uint elements
Definition: sql_list.h:135
list_node ** last
Definition: sql_list.h:132
base_list & operator=(const base_list &tmp)
Definition: sql_list.h:160
bool after(void *info, list_node *node, MEM_ROOT *mem_root)
Definition: sql_list.h:326
void clear()
Definition: sql_list.h:141
list_node * first
Definition: sql_list.h:132
bool push_front(void *info, MEM_ROOT *mem_root)
Definition: sql_list.h:199
Definition: sql_list.h:705
const char * val
Definition: sql_list.h:708
i_string_pair(const char *key_arg, const char *val_arg)
Definition: sql_list.h:710
i_string_pair()
Definition: sql_list.h:709
const char * key
Definition: sql_list.h:707
Definition: sql_list.h:697
i_string(const char *s)
Definition: sql_list.h:701
const char * ptr
Definition: sql_list.h:699
i_string()
Definition: sql_list.h:700
Definition: sql_list.h:677
T * next
Definition: sql_list.h:678
void unlink()
Definition: sql_list.h:683
T ** prev
Definition: sql_list.h:678
ilink()
Definition: sql_list.h:681
static MEM_ROOT mem_root
Definition: client_plugin.cc:113
static int cmp(Bigint *a, Bigint *b)
Definition: dtoa.cc:1059
This file follows Google coding style, except for the name MEM_ROOT (which is kept for historical rea...
Header for compiler-dependent features.
#define SUPPRESS_UBSAN
Definition: my_compiler.h:122
#define DBUG_PRINT(keyword, arglist)
Definition: my_dbug.h:180
Functions related to handling of plugins and other dynamically loaded libraries.
#define MYSQL_PLUGIN_IMPORT
Definition: my_sharedlib.h:70
void copy(Shards< COUNT > &dst, const Shards< COUNT > &src) noexcept
Copy the counters, overwrite destination.
Definition: ut0counter.h:353
static int destroy(mysql_cond_t *that, const char *, unsigned int)
Definition: mysql_cond_v1_native.cc:53
std::list< T, ut::allocator< T > > list
Specialization of list which uses ut_allocator.
Definition: ut0new.h:2877
MYSQL_PLUGIN_IMPORT list_node end_of_list
Definition: sql_list.cc:28
void free_list(I_List< i_string > *list)
Definition: sql_list.cc:30
static void swap(String &a, String &b) noexcept
Definition: sql_string.h:640
case opt name
Definition: sslopt-case.h:32
The MEM_ROOT is a simple arena, where allocations are carved out of larger blocks.
Definition: my_alloc.h:82
list_node - a node of a single-linked list.
Definition: sql_list.h:116
list_node * next
Definition: sql_list.h:117
list_node()
Definition: sql_list.h:121
list_node(void *info_par, list_node *next_par)
Definition: sql_list.h:119
void * info
Definition: sql_list.h:118