An open API service indexing awesome lists of open source software.

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.

Awesome Lists containing this project

README

          




Zollections logo



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();

```