Add cfw_string_find().
This commit is contained in:
parent
e3a666226b
commit
6f0f55365b
3 changed files with 29 additions and 0 deletions
23
src/string.c
23
src/string.c
|
@ -25,6 +25,7 @@
|
|||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "object.h"
|
||||
|
@ -148,6 +149,28 @@ cfw_string_append(CFWString *str, CFWString *append)
|
|||
return true;
|
||||
}
|
||||
|
||||
size_t
|
||||
cfw_string_find(CFWString *str, CFWString *substr, cfw_range_t range)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
if (range.start > str->len)
|
||||
return SIZE_MAX;
|
||||
|
||||
if (range.length == SIZE_MAX)
|
||||
range.length = str->len - range.start;
|
||||
|
||||
if (range.start + range.length > str->len || substr->len > range.length)
|
||||
return SIZE_MAX;
|
||||
|
||||
for (i = range.start; i <= range.start + range.length - substr->len;
|
||||
i++)
|
||||
if (!memcmp(str->data + i, substr->data, substr->len))
|
||||
return i;
|
||||
|
||||
return SIZE_MAX;
|
||||
}
|
||||
|
||||
static CFWClass class = {
|
||||
.name = "CFWString",
|
||||
.size = sizeof(CFWString),
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
#define __COREFW_STRING_H__
|
||||
|
||||
#include "class.h"
|
||||
#include "range.h"
|
||||
|
||||
typedef struct CFWString CFWString;
|
||||
extern CFWClass *cfw_string;
|
||||
|
@ -35,5 +36,6 @@ extern const char* cfw_string_c(CFWString*);
|
|||
extern size_t cfw_string_len(CFWString*);
|
||||
extern bool cfw_string_set(CFWString*, const char*);
|
||||
extern bool cfw_string_append(CFWString*, CFWString*);
|
||||
extern size_t cfw_string_find(CFWString*, CFWString*, cfw_range_t);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue