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
|
||||
- [ ] finish the 'simple' arena implementation.
|
||||
- [ ] arena_alloc
|
||||
- [ ] arena_release
|
||||
- [x] finish the 'simple' arena implementation.
|
||||
- [x] arena_init
|
||||
- [x] arena_alloc
|
||||
- [x] arena_release
|
||||
- [ ] String8 implementation
|
||||
- [x] String8 helpers
|
||||
- [ ] String8Node and String8List.
|
||||
- [ ] push node
|
||||
- [ ] list join
|
||||
- [ ] Convert cstring to String8.
|
||||
- [ ] Convert String8 to cstring.
|
||||
- [x] Convert cstring to String8.
|
||||
- [ ] Read/Write to file.
|
||||
- [ ] Create CLI output.
|
||||
- [ ] Testcases?
|
||||
|
|
49
src/base.c
49
src/base.c
|
@ -1,6 +1,8 @@
|
|||
|
||||
//= rhjr: allocator
|
||||
|
||||
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->offset = 0;
|
||||
|
@ -8,7 +10,7 @@ arena_init(Arena *arena, u8 *backing_buffer, i32 size)
|
|||
}
|
||||
|
||||
internal void *
|
||||
arena_alloc(Arena *arena, i32 size)
|
||||
arena_alloc(Arena *arena, i64 size)
|
||||
{
|
||||
void *result = 0;
|
||||
|
||||
|
@ -27,3 +29,46 @@ arena_release(Arena *arena)
|
|||
{
|
||||
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
|
||||
{
|
||||
u8 *backing_buffer;
|
||||
i32 offset;
|
||||
i32 size;
|
||||
i64 offset;
|
||||
i64 size;
|
||||
}
|
||||
Arena;
|
||||
|
||||
internal void arena_init(Arena *arena, u8 *backing_buffer, i32 size);
|
||||
internal void * arena_alloc(Arena *arena, i32 size);
|
||||
internal void arena_init(Arena *arena, u8 *backing_buffer, i64 size);
|
||||
internal void * arena_alloc(Arena *arena, i64 size);
|
||||
internal void arena_release(Arena *arena);
|
||||
|
||||
//= rhjr: strings
|
||||
|
||||
typedef struct String8
|
||||
typedef struct String8 String8;
|
||||
struct String8
|
||||
{
|
||||
u8* contents;
|
||||
i32 length;
|
||||
}
|
||||
String8;
|
||||
u8* str;
|
||||
i64 length;
|
||||
};
|
||||
|
||||
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
|
||||
|
|
|
@ -15,19 +15,7 @@ u8 backing_buffer[ARENA_DEFAULT_SIZE];
|
|||
int
|
||||
main(void)
|
||||
{
|
||||
Arena arena = {0};
|
||||
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;
|
||||
String8 str = str8_lit("Hello world\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user