[geany/geany] 992306: Add generic pointer array

Jiří Techet git-noreply at xxxxx
Mon Dec 17 21:05:28 UTC 2018


Branch:      refs/heads/master
Author:      Jiří Techet <techet at gmail.com>
Committer:   Jiří Techet <techet at gmail.com>
Date:        Thu, 06 Oct 2016 13:41:19 UTC
Commit:      992306aec3af31868cef702d87bf5d7b99a91112
             https://github.com/geany/geany/commit/992306aec3af31868cef702d87bf5d7b99a91112

Log Message:
-----------
Add generic pointer array


Modified Paths:
--------------
    ctags/Makefile.am
    ctags/main/ptrarray.c
    ctags/main/ptrarray.h

Modified: ctags/Makefile.am
2 lines changed, 2 insertions(+), 0 deletions(-)
===================================================================
@@ -77,6 +77,8 @@ libctags_la_SOURCES = \
 	main/parse.c \
 	main/parse.h \
 	main/parsers.h \
+	main/ptrarray.c \
+	main/ptrarray.h \
 	main/read.c \
 	main/read.h \
 	main/routines.c \


Modified: ctags/main/ptrarray.c
153 lines changed, 153 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,153 @@
+/*
+*   Copyright (c) 1999-2002, Darren Hiebert
+*
+*   This source code is released for free distribution under the terms of the
+*   GNU General Public License version 2 or (at your option) any later version.
+*
+*   This module contains functions managing resizable pointer arrays.
+*/
+
+/*
+*   INCLUDE FILES
+*/
+#include "general.h"  /* must always come first */
+
+#include <string.h>
+
+#include "debug.h"
+#include "routines.h"
+#include "ptrarray.h"
+
+/*
+*   DATA DECLARATIONS
+*/
+
+struct sPtrArray {
+	unsigned int max;
+	unsigned int count;
+	void **array;
+	ptrArrayDeleteFunc deleteFunc;
+};
+
+/*
+*   FUNCTION DEFINITIONS
+*/
+
+extern ptrArray *ptrArrayNew (ptrArrayDeleteFunc deleteFunc)
+{
+	ptrArray* const result = xMalloc (1, ptrArray);
+	result->max = 8;
+	result->count = 0;
+	result->array = xMalloc (result->max, void*);
+	result->deleteFunc = deleteFunc;
+	return result;
+}
+
+extern void ptrArrayAdd (ptrArray *const current, void *ptr)
+{
+	Assert (current != NULL);
+	if (current->count == current->max)
+	{
+		current->max *= 2;
+		current->array = xRealloc (current->array, current->max, void*);
+	}
+	current->array [current->count++] = ptr;
+}
+
+extern void ptrArrayRemoveLast (ptrArray *const current)
+{
+	Assert (current != NULL);
+	Assert (current->count > 0);
+	--current->count;
+}
+
+/* Combine array `from' into `current', deleting `from' */
+extern void ptrArrayCombine (ptrArray *const current, ptrArray *const from)
+{
+	unsigned int i;
+	Assert (current != NULL);
+	Assert (from != NULL);
+	for (i = 0  ;  i < from->count  ;  ++i)
+		ptrArrayAdd (current, from->array [i]);
+	from->count = 0;
+	ptrArrayDelete (from);
+}
+
+extern unsigned int ptrArrayCount (const ptrArray *const current)
+{
+	Assert (current != NULL);
+	return current->count;
+}
+
+extern void* ptrArrayItem (const ptrArray *const current, const unsigned int indx)
+{
+	Assert (current != NULL);
+	return current->array [indx];
+}
+
+extern void* ptrArrayLast (const ptrArray *const current)
+{
+	Assert (current != NULL);
+	Assert (current->count > 0);
+	return current->array [current->count - 1];
+}
+
+extern void ptrArrayClear (ptrArray *const current)
+{
+	Assert (current != NULL);
+	if (current->deleteFunc)
+	{
+		unsigned int i;
+		for (i = 0  ;  i < current->count  ;  ++i)
+			current->deleteFunc (current->array [i]);
+	}
+	current->count = 0;
+}
+
+extern void ptrArrayDelete (ptrArray *const current)
+{
+	if (current != NULL)
+	{
+		ptrArrayClear (current);
+		eFree (current->array);
+		eFree (current);
+	}
+}
+
+extern bool ptrArrayHasTest (const ptrArray *const current,
+				  bool (*test)(const void *ptr, void *userData),
+				  void *userData)
+{
+	bool result = false;
+	unsigned int i;
+	Assert (current != NULL);
+	for (i = 0  ;  ! result  &&  i < current->count  ;  ++i)
+		result = (*test)(current->array [i], userData);
+	return result;
+}
+
+extern void ptrArrayReverse (const ptrArray *const current)
+{
+	unsigned int i, j;
+	void *tmp;
+
+	Assert (current != NULL);
+	for (i = 0, j = current->count - 1 ; i <  (current->count / 2); ++i, --j)
+	{
+		tmp = current->array[i];
+		current->array[i] = current->array[j];
+		current->array[j] = tmp;
+	}
+}
+
+extern void ptrArrayDeleteItem (ptrArray* const current, unsigned int indx)
+{
+	void *ptr = current->array[indx];
+
+	if (current->deleteFunc)
+		current->deleteFunc (ptr);
+
+	memmove (current->array + indx, current->array + indx + 1,
+			(current->count - indx) * sizeof (*current->array));
+	--current->count;
+}


Modified: ctags/main/ptrarray.h
46 lines changed, 46 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,46 @@
+/*
+*   Copyright (c) 1999-2002, Darren Hiebert
+*
+*   This source code is released for free distribution under the terms of the
+*   GNU General Public License version 2 or (at your option) any later version.
+*
+*   Defines external interface to resizable pointer arrays.
+*/
+#ifndef CTAGS_MAIN_PTRARRAY_H
+#define CTAGS_MAIN_PTRARRAY_H
+
+/*
+*   INCLUDE FILES
+*/
+#include "general.h"  /* must always come first */
+
+/*
+*   DATA DECLARATIONS
+*/
+
+typedef void (*ptrArrayDeleteFunc) (void *data);
+
+struct sPtrArray;
+typedef struct sPtrArray ptrArray;
+
+/*
+*   FUNCTION PROTOTYPES
+*/
+
+extern ptrArray *ptrArrayNew (ptrArrayDeleteFunc deleteFunc);
+extern void ptrArrayAdd (ptrArray *const current, void *ptr);
+extern void ptrArrayRemoveLast (ptrArray *const current);
+extern void ptrArrayCombine (ptrArray *const current, ptrArray *const from);
+extern void ptrArrayClear (ptrArray *const current);
+extern unsigned int ptrArrayCount (const ptrArray *const current);
+extern void* ptrArrayItem (const ptrArray *const current, const unsigned int indx);
+extern void* ptrArrayLast (const ptrArray *const current);
+extern void ptrArrayDelete (ptrArray *const current);
+extern bool ptrArrayHasInsensitive (const ptrArray *const current, const void *const ptr);
+extern bool ptrArrayHasTest (const ptrArray *const current,
+				  bool (*test)(const void *ptr, void *userData),
+				  void *userData);
+extern void ptrArrayReverse (const ptrArray *const current);
+extern void ptrArrayDeleteItem (ptrArray* const current, unsigned int indx);
+
+#endif  /* CTAGS_MAIN_PTRARRAY_H */



--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).


More information about the Commits mailing list