changed one-line functions to macros, made code c89 compliant for better portability
Minclude/cutils/cutils.h
@@ -1,6 +1,8 @@
#ifndef CUTILS_H
#define CUTILS_H
#include <cutils/vector.h>
#include <cutils/dyn_string.h>
#include <cutils/misc.h>
#endif //CUTILS_H
#endif /* CUTILS_H */
Minclude/cutils/dyn_string.h
@@ -1,5 +1,6 @@
#ifndef DYN_STRING_H
#define DYN_STRING_H
#define STRING_DEFAULT_SIZE 8
#include <stdint.h>
#include <stdlib.h>
@@ -32,4 +33,4 @@ String* from_cstring(const char* cstring);
char* to_cstring(const String* string);
#endif //DYN_STRING_H
#endif /* DYN_STRING_H */
Minclude/cutils/misc.h
@@ -1,15 +1,19 @@
#ifndef MISC_H
#define MISC_H
#include <stdint.h>
#include <string.h>
#ifdef __unix__
#define _BSD_SOURCE
#define _DEFAULT_SOURCE
#include <unistd.h>
#endif
#ifdef _WIN32
#include <windows.h>
#endif
#include <stdint.h>
#include <string.h>
void sleep_ms(unsigned int milliseconds);
uint32_t ntoh32(uint32_t const net);
#endif //MISC_H
#endif /* MISC_H */
Minclude/cutils/vector.h
@@ -1,5 +1,6 @@
#ifndef VECTOR_H
#define VECTOR_H
#define VECTOR_DEFAULT_SIZE 4
#include <stdint.h>
#include <stdlib.h>
@@ -13,16 +14,16 @@ typedef struct Vector
size_t length;
} Vector;
Vector* new_vector(void);
#define new_vector() vector_with_capacity(VECTOR_DEFAULT_SIZE);
Vector* vector_with_capacity(size_t capacity);
void delete_vector(Vector* vector, void(*rmv) (void*));
void* vector_at(const Vector* vector, size_t index);
void* vector_pop(Vector* vector);
#define vector_pop(vector) vector_pop_at(vector, vector->length-1);
void* vector_pop_at(Vector* vector, size_t index);
bool vector_insert(Vector* vector, size_t index, void* item);
bool vector_push(Vector* vector, void* item);
#define vector_push(vector, item) vector_insert(vector, vector->length, item);
void vector_remove(Vector* vector, size_t index, void (*rmv)(void*));
bool vector_adjust_size(Vector* vector, size_t size);
@@ -30,5 +31,4 @@ bool vector_shrink(Vector* vector);
size_t* vector_find(const Vector* haystack, const void* needle, int (*cmp)(const void*, const void*));
#endif //VECTOR_H
#endif /* VECTOR_H */
Mmeson.build
@@ -1,7 +1,7 @@
project('cutils', 'c')
WARNINGS = ['-Wall', '-Wpedantic', '-Wextra', '-Wnull-dereference', '-Wshadow', '-Wconversion', '-Wstrict-prototypes', '-Wmissing-prototypes', '-Wcast-qual', '-Wstrict-overflow=5', '-Wunreachable-code', '-Wno-unused-parameter' ]
CFLAGS = ['-std=gnu11', '-fstrict-aliasing', '-fPIC'] + WARNINGS
WARNINGS = ['-Wall', '-Wpedantic', '-Wextra', '-Wnull-dereference', '-Wshadow', '-Wconversion', '-Wstrict-prototypes', '-Wmissing-prototypes', '-Wcast-qual', '-Wstrict-overflow=5', '-Wunreachable-code', '-Wno-unused-parameter']
CFLAGS = ['-std=c89', '-fstrict-aliasing', '-fPIC'] + WARNINGS
subdir('include')
subdir('src')
Msrc/dyn_string.c
@@ -67,7 +67,8 @@ bool string_concat(String* string, const String* other)
size_t* string_find_char(const String* haystack, const char needle)
{
size_t* ret;
for(size_t i = 0; i < haystack->length; i++)
size_t i;
for(i = 0; i < haystack->length; i++)
{
if(haystack->chars[i] == needle)
{
Msrc/test.c
@@ -7,18 +7,22 @@ struct test
int b;
};
int cmp_str(const void* str1, const void* str2)
static int cmp_str(const void* str1, const void* str2)
{
const struct test* str1_s = str1;
const struct test* str2_s = str2;
return !((str1_s->a == str2_s->a) && (str1_s->b == str2_s->b));
}
void test1(void)
static void test1(void)
{
Vector* test = new_vector();
size_t* find;
Vector* test;
struct test* my_struct;
my_struct = malloc(sizeof(*my_struct));
test = new_vector()
struct test* my_struct = malloc(sizeof(*my_struct));
my_struct->a = 5;
my_struct->b = 5;
vector_push(test, my_struct);
@@ -47,7 +51,7 @@ void test1(void)
my_struct->a = 8;
my_struct->b = 8;
size_t* find = vector_find(test, my_struct, cmp_str);
find = vector_find(test, my_struct, cmp_str);
printf("pos: %lu\n", *find);
free(find);
@@ -59,16 +63,18 @@ void test1(void)
delete_vector(test,free);
}
void test2(void)
static void test2(void)
{
String* test = new_string();
String* test2;
char* cstring;
string_append(test, 'a');
string_append(test, 'b');
string_append(test, 'c');
string_append(test, 'd');
printf("%ld\n", test->length);
char* cstring = to_cstring(test);
cstring = to_cstring(test);
printf("%s\n", cstring);
free(cstring);
@@ -83,7 +89,7 @@ void test2(void)
printf("%s\n", cstring);
free(cstring);
String* test2 = from_cstring("xyz");
test2 = from_cstring("xyz");
string_concat(test,test2);
cstring = to_cstring(test);
@@ -99,4 +105,5 @@ int main(int argc, char** argv)
test1();
test2();
sleep_ms(1000);
return 0;
}
Msrc/vector.c
@@ -1,10 +1,5 @@
#include <cutils/vector.h>
Vector* new_vector(void)
{
return vector_with_capacity(VECTOR_DEFAULT_SIZE);
}
Vector* vector_with_capacity(size_t capacity)
{
Vector* vector = malloc(sizeof(*vector));
@@ -30,11 +25,6 @@ void* vector_at(const Vector* vector, size_t index)
return vector->items[index];
}
void* vector_pop(Vector* vector)
{
return vector_pop_at(vector, vector->length-1);
}
void* vector_pop_at(Vector* vector, size_t index)
{
void* tmp = vector_at(vector, index);
@@ -59,15 +49,12 @@ void vector_remove(Vector* vector, size_t index, void (*rmv)(void*))
}
}
bool vector_push(Vector* vector, void* item)
{
return vector_insert(vector, vector->length, item);
}
size_t* vector_find(const Vector* haystack, const void* needle, int (*cmp)(const void*, const void*))
{
size_t* ret;
for(size_t i = 0; i < haystack->length; i++)
size_t i;
for(i = 0; i < haystack->length; i++)
{
if(cmp ? cmp(haystack->items[i],needle) == 0 : haystack->items[i] == needle)
{
@@ -124,7 +111,8 @@ bool vector_shrink(Vector* vector)
void delete_vector(Vector* vector, void (*rmv)(void*))
{
for(size_t i = 0; i < vector->length; i++)
size_t i;
for(i = 0; i < vector->length; i++)
{
if(rmv)
rmv(vector->items[i]);