Initial community commit
This commit is contained in:
parent
537bcbc862
commit
fc06254474
16440 changed files with 4239995 additions and 2 deletions
147
Src/Plugins/General/gen_ml/itemlist.cpp
Normal file
147
Src/Plugins/General/gen_ml/itemlist.cpp
Normal file
|
@ -0,0 +1,147 @@
|
|||
/*
|
||||
** Copyright (C) 2003-2006 Nullsoft, Inc.
|
||||
**
|
||||
** This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held
|
||||
** liable for any damages arising from the use of this software.
|
||||
**
|
||||
** Permission is granted to anyone to use this software for any purpose, including commercial applications, and to
|
||||
** alter it and redistribute it freely, subject to the following restrictions:
|
||||
**
|
||||
** 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software.
|
||||
** If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||
**
|
||||
** 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||
**
|
||||
** 3. This notice may not be removed or altered from any source distribution.
|
||||
**
|
||||
*/
|
||||
|
||||
#include <windows.h>
|
||||
#include "itemlist.h"
|
||||
|
||||
C_ItemList::C_ItemList()
|
||||
{
|
||||
}
|
||||
|
||||
C_ItemList::~C_ItemList()
|
||||
{
|
||||
if (m_list) ::free(m_list);
|
||||
}
|
||||
|
||||
void *C_ItemList::Add(void *i)
|
||||
{
|
||||
// check if we have enough space to add an element
|
||||
if (!m_list || alloc_size == 0 || current_index >= alloc_size - 1)//|| !(m_size&31))
|
||||
{
|
||||
alloc_size += MEMORY_STEP;
|
||||
void **new_m_list=(void**)::realloc(m_list,sizeof(void*)*(alloc_size));
|
||||
if (new_m_list)
|
||||
m_list = new_m_list;
|
||||
else
|
||||
{
|
||||
m_list=NULL;
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
// add the element and increase the index
|
||||
m_list[current_index]=i;
|
||||
current_index++;
|
||||
return i;
|
||||
}
|
||||
|
||||
void C_ItemList::Set(int w, void *newv)
|
||||
{
|
||||
if (w >= 0 && w < current_index)
|
||||
{
|
||||
m_list[w]=newv;
|
||||
}
|
||||
}
|
||||
|
||||
void *C_ItemList::Get(int w) const
|
||||
{
|
||||
if (w >= 0 && w < current_index)
|
||||
{
|
||||
return m_list[w];
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void C_ItemList::Del(int idx)
|
||||
{
|
||||
if (m_list && idx >= 0 && idx < current_index)
|
||||
{
|
||||
current_index--;
|
||||
if (idx != current_index)
|
||||
{
|
||||
::memcpy(m_list + idx, m_list + idx + 1, sizeof(void*) * (current_index - idx));
|
||||
}
|
||||
if (!(current_index &31)&& current_index) // resize down
|
||||
{
|
||||
void** new_m_list=(void**)::realloc(m_list,sizeof(void*)* current_index);
|
||||
if (new_m_list) m_list = new_m_list;
|
||||
else
|
||||
{
|
||||
new_m_list=(void**)::malloc(sizeof(void*)* current_index);
|
||||
if (new_m_list)
|
||||
{
|
||||
memcpy(new_m_list, m_list, sizeof(void*)* current_index);
|
||||
free(m_list);
|
||||
m_list = new_m_list;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void *C_ItemList::Insert(void *i, int pos)
|
||||
{
|
||||
if (!m_list || !(current_index &31))
|
||||
{
|
||||
void** new_m_list=(void**)::realloc(m_list,sizeof(void*)*(current_index +32));
|
||||
if (new_m_list)
|
||||
m_list = new_m_list;
|
||||
else
|
||||
{
|
||||
new_m_list=(void**)::malloc(sizeof(void*)*(current_index +32));
|
||||
if (new_m_list)
|
||||
{
|
||||
memcpy(new_m_list, m_list, sizeof(void*)* current_index);
|
||||
free(m_list);
|
||||
m_list = new_m_list;
|
||||
}
|
||||
else
|
||||
return i;
|
||||
}
|
||||
|
||||
}
|
||||
current_index++;
|
||||
|
||||
for ( int j = current_index - 1; j > pos; j-- )
|
||||
m_list[ j ] = m_list[ j - 1 ];
|
||||
|
||||
m_list[ pos ] = i;
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
void C_ItemList::for_all(void (*for_all_func)(void *))
|
||||
{
|
||||
if (m_list)
|
||||
{
|
||||
for (int i=0;i< current_index;i++)
|
||||
{
|
||||
for_all_func(m_list[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void C_ItemList::for_all_ctx(void (*for_all_func)(void *, void *), void *ctx)
|
||||
{
|
||||
if (m_list)
|
||||
{
|
||||
for (int i=0;i< current_index;i++)
|
||||
{
|
||||
for_all_func(m_list[i], ctx);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue