Skip to content

Instantly share code, notes, and snippets.

@Tetralux
Tetralux / strict_allocator.odin
Created February 4, 2024 21:36
Allocator which maps each allocation to a separate page, and locks that page immediately on free
package util
import "core:mem/virtual"
import "core:runtime"
import "core:os"
import "core:fmt"
Strict_Allocator :: struct {
pointers: map[rawptr]int, // pointer -> size
}
@Tetralux
Tetralux / interface_example_allocators.zig
Last active January 18, 2024 13:54
Zig interface example (Allocator)
const Ally = struct {
data: ?*anyopaque,
proc: *const fn(
ally_data: ?*anyopaque,
mode: Mode,
count: usize,
alignment: usize,
old_memory: []u8,
) error{OutOfMemory}![]u8,
@Tetralux
Tetralux / stream_server_error_handling.zig
Last active November 15, 2023 23:56
A simple illustration of a std.net.StreamServer that handles each client with a thread pool, with simple error handling
// A simple illustration of a stream server that handles each client with a thread pool, and
// if any worker returns an error then it prints out the errorReturnTrace.
//
// Untested.
//
// Written by Tetralux, 2023-11-15.
const std = @import("std");
const Data = struct {
@Tetralux
Tetralux / ini.zig
Last active October 21, 2023 02:03
Rudimentary INI parser in Zig
const std = @import("std");
const string = []const u8;
const Allocator = std.mem.Allocator;
/// Given an entire INI string, parses it into a map of key-value pairs.
/// The pairs are all freed by a call to `Parser.deinit`, and retrieved via `Parser.get`.
/// If you need them to live beyond that, use `some_other_allocator.dupe(u8, value)`.
pub const Parser = struct {
data: std.StringArrayHashMap(string),
@Tetralux
Tetralux / simple_exec.zig
Last active October 13, 2023 18:13
A simple example program that runs a program with the given arguments by searching the PATH environment variable.
//
// A simple example program that runs a program with the given arguments by searching the PATH environment variable.
//
// Tetralux, 2023-10-13.
//
const std = @import("std");
const builtin = @import("builtin");
const string = []const u8;
@Tetralux
Tetralux / counting_allocator.odin
Last active March 26, 2023 10:36
Back of the envolope counting allocator implementation
import "core:mem"
import "core:runtime"
Counting_Allocator :: struct {
total_used: uint,
backing_ally: mem.Allocator,
}
counting_allocator :: proc(ca: ^Counting_Allocator) -> mem.Allocator {
return {
@Tetralux
Tetralux / tiny.zig
Last active March 11, 2023 10:37
A simple example of a calculator programming language that compiles to native code!
//
// A simple example of a calculator programming language, that compiles to native code!
//
// Written by Tetralux <tetraluxonpc@gmail.com>, 2023-03-09.
//
// Programs are a string that you pass as an argument in the form of a mathmetical expression.
// e.g: '10 + 4 - 1 + 7'.
// This program will generate some Zig code that computes the answer, and prints it to stdout.
// It then will invoke the Zig compiler as a subprocess to compile and run this program.
//
@Tetralux
Tetralux / popen_test.odin
Last active September 29, 2022 06:32
Example of how to bind and use popen from libc
package process
import "core:c"
import "core:c/libc"
import "core:strings"
when ODIN_OS == .Windows {
foreign import libc_obj "system:libucrt.lib"
POPEN_NAME :: "_popen"
PCLOSE_NAME :: "_pclose"
@Tetralux
Tetralux / vcvarsall.bat
Created January 11, 2022 03:01
A simpler wrapper for vcvarsall.bat which only does the work on the first run
@echo off
:: Path to vcvarsall.bat from Visual Studio
:: When called, it makes cl.exe (C++ compiler) and link.exe (Linker) available in PATH.
set VCVARSPATH="C:\Program Files (x86)\Microsoft Visual Studio\VC\Auxiliary\Build\vcvarsall.bat"
if "%VSISSET%"=="" (
%VCVARSPATH% %*
if "%ERRORLEVEL%"=="0" (
set VSISSET=%*
@Tetralux
Tetralux / base64.odin
Last active August 3, 2019 15:52
Quick and dirty base64 implemention in Odin
/*
A simple base64 encoder/decoder.
Written by Tetralux@github.
Created December 2018.
*/
package base64;
using import "core:fmt";