diff --git a/basics/!demo/README.md b/!basics/!demo/README.md similarity index 100% rename from basics/!demo/README.md rename to !basics/!demo/README.md diff --git a/basics/command_line_arguments/main.odin b/!basics/command_line_arguments/main.odin similarity index 100% rename from basics/command_line_arguments/main.odin rename to !basics/command_line_arguments/main.odin diff --git a/basics/dir_info/main.odin b/!basics/dir_info/main.odin similarity index 100% rename from basics/dir_info/main.odin rename to !basics/dir_info/main.odin diff --git a/basics/dynamic_arrays/dynamic_arrays.odin b/!basics/dynamic_arrays/dynamic_arrays.odin similarity index 100% rename from basics/dynamic_arrays/dynamic_arrays.odin rename to !basics/dynamic_arrays/dynamic_arrays.odin diff --git a/basics/hellope/hellope.odin b/!basics/hellope/hellope.odin similarity index 100% rename from basics/hellope/hellope.odin rename to !basics/hellope/hellope.odin diff --git a/basics/raw_console/main.odin b/!basics/raw_console/main.odin similarity index 100% rename from basics/raw_console/main.odin rename to !basics/raw_console/main.odin diff --git a/basics/raw_console/raw_posix.odin b/!basics/raw_console/raw_posix.odin similarity index 100% rename from basics/raw_console/raw_posix.odin rename to !basics/raw_console/raw_posix.odin diff --git a/basics/raw_console/raw_windows.odin b/!basics/raw_console/raw_windows.odin similarity index 100% rename from basics/raw_console/raw_windows.odin rename to !basics/raw_console/raw_windows.odin diff --git a/basics/read_console_input/read_console_input.odin b/!basics/read_console_input/read_console_input.odin similarity index 100% rename from basics/read_console_input/read_console_input.odin rename to !basics/read_console_input/read_console_input.odin diff --git a/basics/strings/basic_string_example.odin b/!basics/strings/basic_string_example.odin similarity index 100% rename from basics/strings/basic_string_example.odin rename to !basics/strings/basic_string_example.odin diff --git a/basics/variables/variables.odin b/!basics/variables/variables.odin similarity index 100% rename from basics/variables/variables.odin rename to !basics/variables/variables.odin diff --git a/basics/working_directory/working_directory.odin b/!basics/working_directory/working_directory.odin similarity index 100% rename from basics/working_directory/working_directory.odin rename to !basics/working_directory/working_directory.odin diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 539a78b..d921f8b 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -33,16 +33,18 @@ jobs: run: | FLAGS="-vet -strict-style -vet-tabs -disallow-do -warnings-as-errors" - odin check basics/command_line_arguments $FLAGS - odin check basics/dir_info $FLAGS - odin check basics/dynamic_arrays $FLAGS - odin check basics/hellope $FLAGS - odin check basics/raw_console $FLAGS - odin check basics/raw_console -target:windows_amd64 $FLAGS - odin check basics/read_console_input $FLAGS - odin check basics/strings $FLAGS - odin check basics/variables $FLAGS - odin check basics/working_directory $FLAGS + odin check !basics/command_line_arguments $FLAGS + odin check !basics/dir_info $FLAGS + odin check !basics/dynamic_arrays $FLAGS + odin check !basics/hellope $FLAGS + odin check !basics/raw_console $FLAGS + odin check !basics/raw_console -target:windows_amd64 $FLAGS + odin check !basics/read_console_input $FLAGS + odin check !basics/strings $FLAGS + odin check !basics/variables $FLAGS + odin check !basics/working_directory $FLAGS + + odin check arena_allocator $FLAGS odin check directx/d3d12_triangle_sdl2 -target:windows_amd64 $FLAGS diff --git a/arena_allocator/arena_allocator.odin b/arena_allocator/arena_allocator.odin new file mode 100644 index 0000000..5f8aa3b --- /dev/null +++ b/arena_allocator/arena_allocator.odin @@ -0,0 +1,51 @@ +package arena_allocator + +import "core:fmt" +import "core:os" + +// virtual package implements a multi-purpose arena allocator. If you are on a +// platform that does not support virtual memory, then there is also a similar +// arena in `core:mem`. +import vmem "core:mem/virtual" + +load_files :: proc() -> ([]string, vmem.Arena) { + // This creates a growing virtual memory arena. It uses virtual memory and + // can grow as things are added to it. + arena: vmem.Arena + arena_err := vmem.arena_init_growing(&arena) + ensure(arena_err == nil) + arena_alloc := vmem.arena_allocator(&arena) + + // See arena_init_static for an arena that uses virtual memory, but cannot grow. + + // See arena_init_buffer for an arena that does not use virtual memory, + // instead it relies on you feeding it a buffer. + + f1, f1_ok := os.read_entire_file("file1.txt", arena_alloc) + ensure(f1_ok) + + f2, f2_ok := os.read_entire_file("file2.txt", arena_alloc) + ensure(f2_ok) + + f3, f3_ok := os.read_entire_file("file3.txt", arena_alloc) + ensure(f3_ok) + + res := make([]string, 3, arena_alloc) + res[0] = string(f1) + res[1] = string(f2) + res[2] = string(f3) + + return res, arena +} + +main :: proc() { + files, arena := load_files() + + for f in files { + fmt.println(f) + } + + // This deallocates everything that was allocated on the arena: + // The loaded content of the files as well as the `files` slice. + vmem.arena_destroy(&arena) +} \ No newline at end of file diff --git a/arena_allocator/file1.txt b/arena_allocator/file1.txt new file mode 100644 index 0000000..53e6394 --- /dev/null +++ b/arena_allocator/file1.txt @@ -0,0 +1 @@ +This is from file1.txt \ No newline at end of file diff --git a/arena_allocator/file2.txt b/arena_allocator/file2.txt new file mode 100644 index 0000000..9589f17 --- /dev/null +++ b/arena_allocator/file2.txt @@ -0,0 +1 @@ +This is from file2.txt \ No newline at end of file diff --git a/arena_allocator/file3.txt b/arena_allocator/file3.txt new file mode 100644 index 0000000..17e794f --- /dev/null +++ b/arena_allocator/file3.txt @@ -0,0 +1 @@ +This is from file3.txt \ No newline at end of file