mirror of
https://github.com/cc65/cc65.git
synced 2025-01-12 17:30:50 +00:00
Added a new function CollGrow.
git-svn-id: svn://svn.cc65.org/cc65/trunk@4772 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
parent
40eabefe89
commit
5bffbc98ff
@ -6,10 +6,10 @@
|
|||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* (C) 2000-2001 Ullrich von Bassewitz */
|
/* (C) 2000-2010, Ullrich von Bassewitz */
|
||||||
/* Wacholderweg 14 */
|
/* Roemerstrasse 52 */
|
||||||
/* D-70597 Stuttgart */
|
/* D-70794 Filderstadt */
|
||||||
/* EMail: uz@cc65.org */
|
/* EMail: uz@cc65.org */
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* This software is provided 'as-is', without any expressed or implied */
|
/* This software is provided 'as-is', without any expressed or implied */
|
||||||
@ -108,6 +108,29 @@ void FreeCollection (Collection* C)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void CollGrow (Collection* C, unsigned Size)
|
||||||
|
/* Grow the collection C so it is able to hold Size items without a resize
|
||||||
|
* being necessary. This can be called for performance reasons if the number
|
||||||
|
* of items to be placed in the collection is known in advance.
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
void** NewItems;
|
||||||
|
|
||||||
|
/* Ignore the call if the collection is already large enough */
|
||||||
|
if (Size <= C->Size) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Grow the collection */
|
||||||
|
C->Size = Size;
|
||||||
|
NewItems = xmalloc (C->Size * sizeof (void*));
|
||||||
|
memcpy (NewItems, C->Items, C->Count * sizeof (void*));
|
||||||
|
xfree (C->Items);
|
||||||
|
C->Items = NewItems;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void CollInsert (Collection* C, void* Item, unsigned Index)
|
void CollInsert (Collection* C, void* Item, unsigned Index)
|
||||||
/* Insert the data at the given position in the collection */
|
/* Insert the data at the given position in the collection */
|
||||||
{
|
{
|
||||||
@ -117,16 +140,7 @@ void CollInsert (Collection* C, void* Item, unsigned Index)
|
|||||||
/* Grow the array if necessary */
|
/* Grow the array if necessary */
|
||||||
if (C->Count >= C->Size) {
|
if (C->Count >= C->Size) {
|
||||||
/* Must grow */
|
/* Must grow */
|
||||||
void** NewItems;
|
CollGrow (C, (C->Size == 0)? 8 : C->Size * 2);
|
||||||
if (C->Size > 0) {
|
|
||||||
C->Size *= 2;
|
|
||||||
} else {
|
|
||||||
C->Size = 8;
|
|
||||||
}
|
|
||||||
NewItems = xmalloc (C->Size * sizeof (void*));
|
|
||||||
memcpy (NewItems, C->Items, C->Count * sizeof (void*));
|
|
||||||
xfree (C->Items);
|
|
||||||
C->Items = NewItems;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Move the existing elements if needed */
|
/* Move the existing elements if needed */
|
||||||
|
@ -6,10 +6,10 @@
|
|||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* (C) 2000-2001 Ullrich von Bassewitz */
|
/* (C) 2000-2010, Ullrich von Bassewitz */
|
||||||
/* Wacholderweg 14 */
|
/* Roemerstrasse 52 */
|
||||||
/* D-70597 Stuttgart */
|
/* D-70794 Filderstadt */
|
||||||
/* EMail: uz@cc65.org */
|
/* EMail: uz@cc65.org */
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* This software is provided 'as-is', without any expressed or implied */
|
/* This software is provided 'as-is', without any expressed or implied */
|
||||||
@ -90,6 +90,12 @@ Collection* NewCollection (void);
|
|||||||
void FreeCollection (Collection* C);
|
void FreeCollection (Collection* C);
|
||||||
/* Free a collection */
|
/* Free a collection */
|
||||||
|
|
||||||
|
void CollGrow (Collection* C, unsigned Size);
|
||||||
|
/* Grow the collection C so it is able to hold Size items without a resize
|
||||||
|
* being necessary. This can be called for performance reasons if the number
|
||||||
|
* of items to be placed in the collection is known in advance.
|
||||||
|
*/
|
||||||
|
|
||||||
#if defined(HAVE_INLINE)
|
#if defined(HAVE_INLINE)
|
||||||
INLINE unsigned CollCount (const Collection* C)
|
INLINE unsigned CollCount (const Collection* C)
|
||||||
/* Return the number of items in the collection */
|
/* Return the number of items in the collection */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user