https://github.com/zigzedd/zollections
[MIRROR] Zig collections library.
https://github.com/zigzedd/zollections
collections zig zig-library zig-package
Last synced: 11 months ago
JSON representation
[MIRROR] Zig collections library.
- Host: GitHub
- URL: https://github.com/zigzedd/zollections
- Owner: zigzedd
- License: mit
- Created: 2024-10-11T09:17:44.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-10-16T09:55:44.000Z (over 1 year ago)
- Last Synced: 2025-01-21T11:15:32.987Z (over 1 year ago)
- Topics: collections, zig, zig-library, zig-package
- Language: Zig
- Homepage: https://code.zeptotech.net/zedd/zollections
- Size: 10.7 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
Zollections
Documentation
|
API
Zig collections library
Zollections is part of [_zedd_](https://code.zeptotech.net/zedd), a collection of useful libraries for zig.
## Zollections
_Zollections_ is a collections library for Zig. It's made to ease memory management of dynamically allocated slices and elements.
## Versions
Zollections 0.1.1 is made and tested with zig 0.13.0.
## How to use
### Install
In your project directory:
```shell
$ zig fetch --save https://code.zeptotech.net/zedd/zollections/archive/v0.1.1.tar.gz
```
In `build.zig`:
```zig
// Add zollections dependency.
const zollections = b.dependency("zollections", .{
.target = target,
.optimize = optimize,
});
exe.root_module.addImport("zollections", zollections.module("zollections"));
```
### Examples
These examples are taken from tests in [`tests/collection.zig`](https://code.zeptotech.net/zedd/zollections/src/branch/main/tests/collection.zig).
#### Simple collection
```zig
// Allocate your slice.
const slice = try allocator.alloc(*u8, 3);
// Create your slice elements.
slice[0] = try allocator.create(u8);
slice[1] = try allocator.create(u8);
slice[2] = try allocator.create(u8);
// Create a collection with your slice of elements.
const collection = try zollections.Collection(u8).init(allocator, slice);
// Free your collection: your slice and all your elements will be freed.
defer collection.deinit();
```
#### Recursive free
```zig
// Create a pointer to a slice.
const slicePointer = try allocator.create([]*u8);
// Allocate your slice in the pointed slice.
slicePointer.* = try allocator.alloc(*u8, 3);
// Create slice elements.
slicePointer.*[0] = try allocator.create(u8);
slicePointer.*[1] = try allocator.create(u8);
slicePointer.*[2] = try allocator.create(u8);
// Allocate your slice or pointers to slices.
const slice = try allocator.alloc(*[]*u8, 1);
slice[0] = slicePointer;
// Create a collection with your slice of elements.
const collection = try zollections.Collection([]*u8).init(allocator, slice);
// Free your collection: your slice and all your slices and their elements will be freed.
defer collection.deinit();
```
#### Custom structure deinitialization
```zig
/// An example structure.
const ExampleStruct = struct {
const Self = @This();
allocator: std.mem.Allocator,
buffer: []u8,
/// Initialize a new example struct.
pub fn init(bufSiz: usize) !Self
{
const allocator = std.testing.allocator;
return .{
.allocator = allocator,
.buffer = try allocator.alloc(u8, bufSiz),
};
}
/// Deinitialize the example struct.
pub fn deinit(self: *Self) void
{
self.allocator.free(self.buffer);
}
};
// Allocate your slice.
const slice = try allocator.alloc(*ExampleStruct, 3);
// Create your slice elements with custom structs and their inner init / deinit.
slice[0] = try allocator.create(ExampleStruct);
slice[0].* = try ExampleStruct.init(4);
slice[1] = try allocator.create(ExampleStruct);
slice[1].* = try ExampleStruct.init(8);
slice[2] = try allocator.create(ExampleStruct);
slice[2].* = try ExampleStruct.init(16);
// Create a collection with your slice of elements.
const collection = try zollections.Collection(ExampleStruct).init(allocator, slice);
// Free your collection: your slice and all your elements will be deinitialized and freed.
defer collection.deinit();
```