Commit 4eb8c35b authored by Aleksey Midenkov's avatar Aleksey Midenkov

MDEV-28576 Ability to manipulate List<const char *>

For "const char *" replace() and after() accepted const as "T *" and
passed forward "void *". This cannot be cast implicitly, so we better
use "const void *" instead of "void *" in the input interface. This
way we avoid problems with using List for any const type.
parent c0eda62a
...@@ -118,8 +118,8 @@ struct list_node :public Sql_alloc ...@@ -118,8 +118,8 @@ struct list_node :public Sql_alloc
{ {
list_node *next; list_node *next;
void *info; void *info;
list_node(void *info_par,list_node *next_par) list_node(const void *info_par, list_node *next_par)
:next(next_par),info(info_par) :next(next_par), info(const_cast<void *>(info_par))
{} {}
list_node() /* For end_of_list */ list_node() /* For end_of_list */
{ {
...@@ -384,7 +384,7 @@ class base_list :public Sql_alloc ...@@ -384,7 +384,7 @@ class base_list :public Sql_alloc
#endif // LIST_EXTRA_DEBUG #endif // LIST_EXTRA_DEBUG
protected: protected:
void after(void *info,list_node *node) void after(const void *info, list_node *node)
{ {
list_node *new_node=new list_node(info,node->next); list_node *new_node=new list_node(info,node->next);
node->next=new_node; node->next=new_node;
...@@ -445,11 +445,11 @@ class base_list_iterator ...@@ -445,11 +445,11 @@ class base_list_iterator
{ {
el= &list->first; el= &list->first;
} }
inline void *replace(void *element) inline void *replace(const void *element)
{ // Return old element { // Return old element
void *tmp=current->info; void *tmp=current->info;
DBUG_ASSERT(current->info != 0); DBUG_ASSERT(current->info != 0);
current->info=element; current->info= const_cast<void *>(element);
return tmp; return tmp;
} }
void *replace(base_list &new_list) void *replace(base_list &new_list)
...@@ -472,7 +472,7 @@ class base_list_iterator ...@@ -472,7 +472,7 @@ class base_list_iterator
el=prev; el=prev;
current=0; // Safeguard current=0; // Safeguard
} }
void after(void *element) // Insert element after current void after(const void *element) // Insert element after current
{ {
list->after(element,current); list->after(element,current);
current=current->next; current=current->next;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment