added memmem to extensions
Minclude/cutils/dyn_string.h
@@ -43,10 +43,13 @@ void string_remove_range(String* string, size_t index, size_t length);
size_t string_strip(String* string, char character);
bool string_adjust_size(String* string, size_t size);
/* TODO: rework find functions to take extra argument of result count
* and then find that many and return them in a vector/linked list */
bool string_find_char(const String* haystack, const char needle, size_t* pos);
bool string_find_str(const String* haystack, const String* needle, size_t* pos);
HEDLEY_INLINE
static bool string_find_str(const String* haystack, const String* needle, size_t* pos)
{
return cutil_memmem(haystack->chars, haystack->length, needle->chars, needle->length, pos);
}
size_t string_count(const String* string, char character);
bool string_concat(String* string, const String* other);
Minclude/cutils/extensions.h
@@ -9,6 +9,7 @@
#include <ctype.h>
#include <stdarg.h>
#include <stdio.h>
#include <cutils/common.h>
int cutil_strcasecmp(const char* s1, const char* s2);
int cutil_strncasecmp(const char* s1, const char* s2, size_t n);
@@ -18,6 +19,8 @@ size_t cutil_strnlen(const char *s, size_t maxlen);
char* cutil_strdup(const char *s);
char* cutil_strndup(const char *s, size_t n);
bool cutil_memmem(const void* haystack, size_t haystacklen, const void* needle, size_t needlelen, size_t* pos);
#if __STDC_VERSION__ >= 199901L
int cutil_asprintf(char** strp, const char* format, ...);
#endif
Msrc/dyn_string.c
@@ -97,26 +97,6 @@ bool string_find_char(const String* haystack, const char needle, size_t* pos)
return false;
}
bool string_find_str(const String* haystack, const String* needle, size_t* pos)
{
size_t i, j, tmp;
for(i = 0; i < haystack->length; i++)
{
for(j = 0, tmp = i; j < needle->length && i < haystack->length; j++, i++)
{
if(haystack->chars[i] != needle->chars[j])
{
break;
} else if(j == needle->length-1){
*pos = tmp;
return true;
}
}
}
return false;
}
size_t string_count(const String* string, char character)
{
size_t i, ret = 0;
Msrc/extensions.c
@@ -75,6 +75,33 @@ char* cutil_strndup(const char *s, size_t n)
return ret;
}
bool cutil_memmem(const void* haystack, size_t haystacklen, const void* needle, size_t needlelen, size_t* pos)
{
size_t i, j, tmp;
const byte* haystackb = haystack;
const byte* needleb = needle;
if (haystacklen == 0 || needlelen == 0)
return false;
for(i = 0; i < haystacklen; i++)
{
for(j = 0, tmp = i; j < needlelen && i < haystacklen; j++, i++)
{
if(haystackb[i] != needleb[j])
{
break;
} else if(j == needlelen-1){
*pos = tmp;
return true;
}
}
}
return false;
}
#if __STDC_VERSION__ >= 199901L
int cutil_asprintf(char** strp, const char* format, ...)
{
Msrc/linked-list.c
@@ -306,7 +306,6 @@ void sll_swap(LinkedList* ll, size_t item1, size_t item2)
{
size_t i, first_index, second_index;
SLnode *first, *second;
void* tmp;
first_index = item1 <= item2 ? item1 : item2;
second_index = item1 <= item2 ? item2 : item1;
@@ -324,11 +323,7 @@ void sll_swap(LinkedList* ll, size_t item1, size_t item2)
if(!first)
first = second;
tmp = first->item;
first->item = second->item;
second->item = tmp;
/*memswap(&first->item, &second->item, sizeof(first->item));*/
memswap(&first->item, &second->item, sizeof(first->item));
}
void dll_swap(LinkedList* ll, size_t item1, size_t item2)