Compare commits
2 Commits
98ee2b701f
...
551be318cf
Author | SHA1 | Date | |
---|---|---|---|
rhuibertsjr | 551be318cf | ||
rhuibertsjr | 2a1cbea209 |
|
@ -1,3 +1,11 @@
|
||||||
27-04-2024 René Huiberts <rhuibertsjr@gmail.com>
|
27-04-2024 René Huiberts <rhuibertsjr@gmail.com>
|
||||||
|
|
||||||
|
Added: simplified boyer–moore string-search algorithm
|
||||||
|
|
||||||
|
27-04-2024 René Huiberts <rhuibertsjr@gmail.com>
|
||||||
|
|
||||||
|
Added: ASCII string api
|
||||||
|
|
||||||
|
27-04-2024 René Huiberts <rhuibertsjr@gmail.com>
|
||||||
|
|
||||||
Added: project layout
|
Added: project layout
|
||||||
|
|
35
src/main.c
35
src/main.c
|
@ -1,17 +1,46 @@
|
||||||
#include "base.h"
|
#include "base.h"
|
||||||
#include "arena.h"
|
#include "arena.h"
|
||||||
|
#include "string.h"
|
||||||
#include "win32_platform.h"
|
#include "win32_platform.h"
|
||||||
|
|
||||||
#include "arena.c"
|
#include "arena.c"
|
||||||
|
#include "string.c"
|
||||||
#include "win32_platform.c"
|
#include "win32_platform.c"
|
||||||
|
|
||||||
int
|
int
|
||||||
main(void)
|
main(void)
|
||||||
{
|
{
|
||||||
Arena *arena = arena_initialize_default();
|
String8 input = str8_lit("Hello world");
|
||||||
|
String8 pattern = str8_lit("wor");
|
||||||
|
|
||||||
/* lifetime of objects */
|
if (pattern.length <= 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
for (u64 index = pattern.length; index < input.length; index += 1)
|
||||||
|
{
|
||||||
|
u8* ptr_input = input.str + index - 1;
|
||||||
|
u8* ptr_pattern = pattern.str + pattern.length - 1;
|
||||||
|
|
||||||
|
for (u64 jndex = 1; jndex != pattern.length; jndex += 1)
|
||||||
|
{
|
||||||
|
ptr_input -= 1;
|
||||||
|
ptr_pattern -= 1;
|
||||||
|
|
||||||
|
u8 char_input = *ptr_input;
|
||||||
|
u8 char_pattern = *ptr_pattern;
|
||||||
|
|
||||||
|
if (char_input == char_pattern)
|
||||||
|
{
|
||||||
|
if (jndex == pattern.length - 1)
|
||||||
|
printf("Pattern is found.\n");
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
arena_release(arena);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
internal String8
|
||||||
|
str8_initialize(u8 *cstring, u64 length)
|
||||||
|
{
|
||||||
|
String8 result = { cstring, length };
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal String8
|
||||||
|
str8_range(u8 *first, u8 *opl) {
|
||||||
|
String8 result = { first, (u64)(opl - first) };
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal String8
|
||||||
|
str8_from_cstring(u8 *cstring) {
|
||||||
|
u8 *ptr = cstring;
|
||||||
|
for (;*ptr != 0; ptr += 1);
|
||||||
|
String8 result = str8_range(cstring, ptr);
|
||||||
|
return result;
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
#ifndef STRING_H
|
||||||
|
#define STRING_H 1
|
||||||
|
|
||||||
|
typedef struct String8 String8;
|
||||||
|
struct String8
|
||||||
|
{
|
||||||
|
u8 *str;
|
||||||
|
u64 length;
|
||||||
|
};
|
||||||
|
|
||||||
|
internal String8 str8_initialize(u8 *cstring, u64 length);
|
||||||
|
#define str8_lit(cstring) \
|
||||||
|
str8_initialize((u8*)(cstring), sizeof(cstring) - 1)
|
||||||
|
|
||||||
|
#define str8_lit_comp(cstring) \
|
||||||
|
{(u8*)(cstring), sizeof(cstring) - 1}
|
||||||
|
|
||||||
|
//= rhjr: helper macros
|
||||||
|
|
||||||
|
#define print_str8(str8) \
|
||||||
|
printf("%.*s\n", (i32) str8.length, str8.str)
|
||||||
|
|
||||||
|
#endif // STRING_H
|
Loading…
Reference in New Issue
Block a user