]> git.mdlowis.com Git - projs/alib.git/commitdiff
more consistent style and added a sort function for vec.h
authorMichael D. Lowis <mike@mdlowis.com>
Thu, 23 Feb 2017 20:50:47 +0000 (15:50 -0500)
committerMichael D. Lowis <mike@mdlowis.com>
Thu, 23 Feb 2017 20:50:47 +0000 (15:50 -0500)
source/vec.h

index 2abfd3f218e897bfa51562d626b50a17209db410..c7b61138b7fe181c8d03f7a6692265d0e6770d79 100644 (file)
@@ -3,6 +3,14 @@
   @author Michael D. Lowis
   @license BSD 2-clause License
 */
+#ifndef VEC_H
+#define VEC_H
+
+#include <stddef.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
 
 typedef struct {
     size_t   elem_count;
@@ -11,6 +19,8 @@ typedef struct {
     uint8_t* elem_buffer;
 } vec_t;
 
+typedef int (*vec_cmpfn_t)(const void*,const void*);
+
 #ifndef DEFAULT_VEC_CAPACITY
 #define DEFAULT_VEC_CAPACITY (size_t)8
 #endif
@@ -42,28 +52,23 @@ static size_t vec_next_capacity(size_t req_size) {
     /* Find the next highest power of 2 */
     next_power--;
     for (bit_n = 1; bit_n < num_bits; bit_n = bit_n << 1)
-    {
         next_power = next_power | (next_power >> bit_n);
-    }
     next_power++;
 
     return next_power;
 }
 
 static void vec_reserve(vec_t* vec, size_t size) {
-    vec->elem_buffer = realloc(vec->elem_buffer, size * vec->elem_size);
-    vec->elem_count  = size;
+    vec->elem_buffer   = realloc(vec->elem_buffer, size * vec->elem_size);
+    vec->elem_capacity = size;
 }
 
 static void vec_resize(vec_t* vec, size_t count, void* fillval) {
-    if (count > vec->elem_count)
-    {
+    if (count > vec->elem_count) {
         vec_reserve(vec, vec_next_capacity(count+1));
         for (; vec->elem_count < count; vec->elem_count++)
             memcpy(&(vec->elem_buffer[vec->elem_count * vec->elem_size]), fillval, vec->elem_size);
-    }
-    else if (count < vec->elem_count)
-    {
+    } else if (count < vec->elem_count) {
         vec->elem_count = count;
     }
 }
@@ -107,3 +112,9 @@ static void vec_pop_back(vec_t* vec, void* outdata) {
 static void vec_clear(vec_t* vec) {
     vec->elem_count = 0;
 }
+
+static void vec_sort(vec_t* vec, int (*cmpfn)(const void*,const void*)) {
+    qsort(vec->elem_buffer, vec->elem_count, vec->elem_size, cmpfn);
+}
+
+#endif /* VEC_H */