Added: String8, String8Node and String8List types.
This commit is contained in:
parent
2488680376
commit
6e8474633e
11
docs/tasks
11
docs/tasks
|
@ -1,14 +1,15 @@
|
||||||
|
|
||||||
Tasks
|
Tasks
|
||||||
- [ ] finish the 'simple' arena implementation.
|
- [x] finish the 'simple' arena implementation.
|
||||||
- [ ] arena_alloc
|
- [x] arena_init
|
||||||
- [ ] arena_release
|
- [x] arena_alloc
|
||||||
|
- [x] arena_release
|
||||||
- [ ] String8 implementation
|
- [ ] String8 implementation
|
||||||
|
- [x] String8 helpers
|
||||||
- [ ] String8Node and String8List.
|
- [ ] String8Node and String8List.
|
||||||
- [ ] push node
|
- [ ] push node
|
||||||
- [ ] list join
|
- [ ] list join
|
||||||
- [ ] Convert cstring to String8.
|
- [x] Convert cstring to String8.
|
||||||
- [ ] Convert String8 to cstring.
|
|
||||||
- [ ] Read/Write to file.
|
- [ ] Read/Write to file.
|
||||||
- [ ] Create CLI output.
|
- [ ] Create CLI output.
|
||||||
- [ ] Testcases?
|
- [ ] Testcases?
|
||||||
|
|
49
src/base.c
49
src/base.c
|
@ -1,6 +1,8 @@
|
||||||
|
|
||||||
|
//= rhjr: allocator
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
arena_init(Arena *arena, u8 *backing_buffer, i32 size)
|
arena_init(Arena *arena, u8 *backing_buffer, i64 size)
|
||||||
{
|
{
|
||||||
arena->backing_buffer = backing_buffer;
|
arena->backing_buffer = backing_buffer;
|
||||||
arena->offset = 0;
|
arena->offset = 0;
|
||||||
|
@ -8,7 +10,7 @@ arena_init(Arena *arena, u8 *backing_buffer, i32 size)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void *
|
internal void *
|
||||||
arena_alloc(Arena *arena, i32 size)
|
arena_alloc(Arena *arena, i64 size)
|
||||||
{
|
{
|
||||||
void *result = 0;
|
void *result = 0;
|
||||||
|
|
||||||
|
@ -27,3 +29,46 @@ arena_release(Arena *arena)
|
||||||
{
|
{
|
||||||
arena->offset = 0;
|
arena->offset = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//= rhjr: string
|
||||||
|
|
||||||
|
String8
|
||||||
|
str8(u8 *cstr, i64 length)
|
||||||
|
{
|
||||||
|
String8 result = {0};
|
||||||
|
result.str = cstr;
|
||||||
|
result.length = length;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
String8
|
||||||
|
str8_cstring(u8 *cstr)
|
||||||
|
{
|
||||||
|
String8 result = {0};
|
||||||
|
u8 *ptr = cstr;
|
||||||
|
for(; *ptr != 0; ptr += 1);
|
||||||
|
result = str8_range(cstr, ptr);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
String8
|
||||||
|
str8_range(u8 *first_char, u8 *last_char)
|
||||||
|
{
|
||||||
|
String8 result = {0};
|
||||||
|
result.str = first_char;
|
||||||
|
result.length = (u64)(last_char - first_char);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
str8_list_push (Arena *arena, String8List *list, String8 string)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
String8
|
||||||
|
str8_list_join(Arena *arena, String8List *list)
|
||||||
|
{
|
||||||
|
String8 result = {0};
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
43
src/base.h
43
src/base.h
|
@ -31,24 +31,49 @@ typedef uint64_t b64;
|
||||||
typedef struct Arena
|
typedef struct Arena
|
||||||
{
|
{
|
||||||
u8 *backing_buffer;
|
u8 *backing_buffer;
|
||||||
i32 offset;
|
i64 offset;
|
||||||
i32 size;
|
i64 size;
|
||||||
}
|
}
|
||||||
Arena;
|
Arena;
|
||||||
|
|
||||||
internal void arena_init(Arena *arena, u8 *backing_buffer, i32 size);
|
internal void arena_init(Arena *arena, u8 *backing_buffer, i64 size);
|
||||||
internal void * arena_alloc(Arena *arena, i32 size);
|
internal void * arena_alloc(Arena *arena, i64 size);
|
||||||
internal void arena_release(Arena *arena);
|
internal void arena_release(Arena *arena);
|
||||||
|
|
||||||
//= rhjr: strings
|
//= rhjr: strings
|
||||||
|
|
||||||
typedef struct String8
|
typedef struct String8 String8;
|
||||||
|
struct String8
|
||||||
{
|
{
|
||||||
u8* contents;
|
u8* str;
|
||||||
i32 length;
|
i64 length;
|
||||||
}
|
};
|
||||||
String8;
|
|
||||||
|
|
||||||
|
typedef struct String8Node String8Node;
|
||||||
|
struct String8Node
|
||||||
|
{
|
||||||
|
String8Node *next;
|
||||||
|
String8 string;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct String8List String8List;
|
||||||
|
struct String8List
|
||||||
|
{
|
||||||
|
String8Node *first;
|
||||||
|
String8Node *last;
|
||||||
|
i64 num_of_nodes;
|
||||||
|
i64 total_length;
|
||||||
|
};
|
||||||
|
|
||||||
|
String8 str8(u8 *cstr, i64 length);
|
||||||
|
String8 str8_from_cstr(u8* cstr);
|
||||||
|
|
||||||
|
#define str8_lit(string) str8((u8*)(string), sizeof(string) - 1)
|
||||||
|
#define str8_lit_comp(string) (u8*)(string), length)
|
||||||
|
|
||||||
|
String8 str8_range (u8 *first_char, u8 *last_char);
|
||||||
|
|
||||||
|
void str8_list_push (Arena *arena, String8List *list, String8 string);
|
||||||
|
String8 str8_list_join (Arena *arena, String8List *list);
|
||||||
|
|
||||||
#endif // BASE_H
|
#endif // BASE_H
|
||||||
|
|
|
@ -15,19 +15,7 @@ u8 backing_buffer[ARENA_DEFAULT_SIZE];
|
||||||
int
|
int
|
||||||
main(void)
|
main(void)
|
||||||
{
|
{
|
||||||
Arena arena = {0};
|
String8 str = str8_lit("Hello world\n");
|
||||||
arena_init(&arena, &backing_buffer[0], ARENA_DEFAULT_SIZE);
|
|
||||||
|
|
||||||
i64 *idx = arena_alloc(&arena, sizeof(i64));
|
|
||||||
*idx = 69;
|
|
||||||
|
|
||||||
i64 *idx2 = arena_alloc(&arena, 2 * sizeof(i64));
|
|
||||||
*idx2++ = 69;
|
|
||||||
|
|
||||||
i64 *idx3 = arena_alloc(&arena, sizeof(i64));
|
|
||||||
*idx3 = 124;
|
|
||||||
|
|
||||||
*idx2 = 139;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user