]> code.citadel.org Git - citadel.git/blobdiff - libcitadel/lib/array.c
array.c: minor changes to comments
[citadel.git] / libcitadel / lib / array.c
index 1adc1fde8f39f078464b3fdbb486e4930028bfd1..d43756ecb18339ec7c8550bac32555a75a75f7d3 100644 (file)
@@ -1,24 +1,9 @@
-/*
- * This is a quickly-hacked-together implementation of an elastic array class.  It includes constructor and destructor
- * methods, append and access methods, and that's about it.  The memory allocation is very naive: whenever we are about
- * to append beyond the size of the buffer, we double its size.
- *
- * Copyright (c) 2021 by Art Cancro
- *
- * This program is open source software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
+// This is a simple implementation of an elastic array class in pure C language.
+//
+// Copyright (c) 2021-2023 by Art Cancro
+//
+// This program is open source software.  Use, duplication, or disclosure
+// is subject to the terms of the GNU General Public License, version 3.
 
 
 #include <stdlib.h>
@@ -26,9 +11,8 @@
 #include <stdio.h>
 #include "libcitadel.h"
 
-/*
- * Constructor for elastic array
- */
+
+// Constructor for elastic array
 Array *array_new(size_t element_size) {
        Array *newarr = malloc(sizeof(Array));
        if (newarr) {
@@ -39,18 +23,14 @@ Array *array_new(size_t element_size) {
 }
 
 
-/*
- * Destructor for elastic array
- */
+// Destructor for elastic array
 void array_free(Array *arr) {
        free(arr->the_elements);
        free(arr);
 }
 
 
-/*
- * Append an element to an array (we already know the element size because it's in the data type)
- */
+// Append an element to an array (we already know the element size because it's in the data type)
 void array_append(Array *arr, void *new_element) {
 
        if (!arr) {                                             // silently fail if they gave us a null array
@@ -79,34 +59,30 @@ void array_append(Array *arr, void *new_element) {
 }
 
 
-/*
- * Return the element in an array at the specified index
- */
+// Return the element in an array at the specified index
 void *array_get_element_at(Array *arr, int index) {
        return (arr->the_elements + ( index * arr->element_size ));
 }
 
 
-/*
- * Return the number of elements in an array
- */
+// Return the number of elements in an array
 int array_len(Array *arr) {
+       if (!arr) {
+               return(0);
+       }
+
        return arr->num_elements;
 }
 
 
-/*
- * Sort an array.  We already know the element size and number of elements, so all we need is
- * a sort function, which we will pass along to qsort().
- */
+// Sort an array.  We already know the element size and number of elements, so all we need is
+// a sort function, which we will pass along to qsort().
 void array_sort(Array *arr, int (*compar)(const void *, const void *)) {
        qsort(arr->the_elements, arr->num_elements, arr->element_size, compar);
 }
 
 
-/*
- * Delete an element from an array
- */
+// Delete an element from an array
 void array_delete_element_at(Array *arr, int index) {
 
        if (index >= arr->num_elements) {               // If the supplied index is out of bounds, return quietly.
@@ -123,7 +99,7 @@ void array_delete_element_at(Array *arr, int index) {
                return;
        }
 
-       memcpy(
+       memmove(                                        // memmove() is supposed to be safer than memcpy()
                (arr->the_elements + (index * arr->element_size)),
                arr->the_elements + ((index+1) * arr->element_size),
                (arr->num_elements - index) * arr->element_size