aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile22
-rw-r--r--src/sort_example.c61
2 files changed, 81 insertions, 2 deletions
diff --git a/Makefile b/Makefile
index b805715..63d5ff8 100644
--- a/Makefile
+++ b/Makefile
@@ -14,6 +14,8 @@ CFLAGS += -I include
all: \
out/custom_uniq \
out/mem_internal_check \
+ out/remove_existing_lines \
+ out/sort_example \
out/split_for_sort \
out/tree_based_check
@@ -21,6 +23,8 @@ all: \
debug: \
out/debug/custom_uniq \
out/debug/mem_internal_check \
+ out/debug/remove_existing_lines \
+ out/debug/sort_example \
out/debug/split_for_sort \
out/debug/tree_based_check
@@ -47,13 +51,27 @@ out/debug/custom_uniq: out/debug src/custom_uniq.c include/trace_macros.h
${CC} -o $@ ${CFLAGS} ${DEBUG_CFLAGS} src/custom_uniq.c
out/mem_internal_check: out src/mem_internal_check.c \
- include/trace_macros.h include/hex_conversion.h
+ include/trace_macros.h include/hex_conversion.h include/time_utils.h
${CC} -o $@ ${CFLAGS} ${PROD_CFLAGS} src/mem_internal_check.c
out/debug/mem_internal_check: out/debug src/mem_internal_check.c \
- include/trace_macros.h include/hex_conversion.h
+ include/trace_macros.h include/hex_conversion.h include/time_utils.h
${CC} -o $@ ${CFLAGS} ${DEBUG_CFLAGS} src/mem_internal_check.c
+out/remove_existing_lines: out src/remove_existing_lines.c \
+ include/trace_macros.h include/time_utils.h
+ ${CC} -o $@ ${CFLAGS} ${PROD_CFLAGS} src/remove_existing_lines.c
+
+out/debug/remove_existing_lines: out/debug src/mem_internal_check.c \
+ include/trace_macros.h include/hex_conversion.h
+ ${CC} -o $@ ${CFLAGS} ${DEBUG_CFLAGS} src/remove_existing_lines.c
+
+out/sort_example: out src/sort_example.c
+ ${CC} -o $@ ${CFLAGS} ${PROD_CFLAGS} src/sort_example.c
+
+out/debug/sort_example: out src/sort_example.c
+ ${CC} -o $@ ${CFLAGS} ${DEBUG_CFLAGS} src/sort_example.c
+
out/split_for_sort: out src/split_for_sort.c include/trace_macros.h
${CC} -o $@ ${CFLAGS} ${PROD_CFLAGS} src/split_for_sort.c
diff --git a/src/sort_example.c b/src/sort_example.c
new file mode 100644
index 0000000..7506cde
--- /dev/null
+++ b/src/sort_example.c
@@ -0,0 +1,61 @@
+
+/*
+ * vim:ts=4:sw=4:expandtab
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <stdbool.h>
+#include <stdint.h>
+
+int sort_comp(const void *a, const void *b) {
+ /* casting is dark magic */
+ char * const *A = a;
+ char * const *B = b;
+ return strcmp(*A,*B);
+}
+
+bool search_in_array(char *str, char *array[], size_t items) {
+ char *cptr = NULL;
+
+ printf (" ==> Search for '%s'\n", str);
+ cptr = bsearch(&str, array, items, sizeof(char*), sort_comp);
+
+ return (cptr==NULL) ? false : true ;
+}
+
+int main(void) {
+ char *array[] = {
+ "some", "example", "test", "data", "for", "sort",
+ "and", "search", "duplicate", "data" };
+ size_t items = sizeof(array)/sizeof(char*) ;
+ size_t i = 0;
+
+ printf(" ==> raw test data\n");
+ for (i=0; i<items; i++) {
+ printf("\t%2lu - %s\n", i, array[i]);
+ }
+
+ printf(" ==> qsort call\n");
+ qsort(array, items, sizeof(char*), sort_comp);
+
+ printf(" ==> sorted test data\n");
+ for (i=0; i<items; i++) {
+ printf("\t%2lu - %s\n", i, array[i]);
+ }
+
+ if (search_in_array("data", array, items)) {
+ printf("\t-> positive hit\n");
+ } else {
+ printf("\t-> not found\n");
+ }
+
+ if (search_in_array("non-existing", array, items)) {
+ printf("\t-> positive hit\n");
+ } else {
+ printf("\t-> not found\n");
+ }
+
+ return EXIT_SUCCESS;
+}