• Stars
    star
    1,104
  • Rank 42,038 (Top 0.9 %)
  • Language
    Rust
  • License
    zlib License
  • Created over 6 years ago
  • Updated 9 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Slotmap data structure for Rust

slotmap

A Rust library providing three containers with persistent unique keys to access stored values, SlotMap, HopSlotMap and DenseSlotMap. Upon insertion a key is returned that can be used to later access or remove the values. Insertion, deletion and access all take O(1) time with low overhead. Great for storing collections of objects that need stable, safe references but have no clear ownership otherwise, such as game entities or graph nodes. Two secondary maps, SecondaryMap and SparseSecondaryMap are also provided that allow you to map further objects to the keys created by one of the slot maps. Please refer to the the documentation for more information.

The minimum required stable Rust version for slotmap is 1.49. To start using slotmap add the following to your Cargo.toml:

[dependencies]
slotmap = "1.0"

Example

A short example:

use slotmap::{SlotMap, SecondaryMap};

let mut sm = SlotMap::new();
let foo = sm.insert("foo");  // Key generated on insert.
let bar = sm.insert("bar");
assert_eq!(sm[foo], "foo");
assert_eq!(sm[bar], "bar");

sm.remove(bar);
let reuse = sm.insert("reuse");  // Space from bar reused.
assert_eq!(sm.contains_key(bar), false);  // After deletion a key stays invalid.

let mut sec = SecondaryMap::new();
sec.insert(foo, "noun");  // We provide the key for secondary maps.
sec.insert(reuse, "verb");

for (key, val) in sm {
    println!("{} is a {}", val, sec[key]);
}

License

slotmap is released under the Zlib license, a permissive license. It is OSI and FSF approved and GPL compatible.

More Repositories

1

pdqsort

Pattern-defeating quicksort.
C++
2,334
star
2

glidesort

A Rust implementation of Glidesort, my stable adaptive quicksort/mergesort hybrid sorting algorithm.
Rust
1,571
star
3

ed25519

Portable C implementation of Ed25519, a high-speed high-security public-key signature system.
C
487
star
4

polymur-hash

The PolymurHash universal hash function.
C
316
star
5

dev-on-windows

An opiniated guide to set up a development environment on Windows.
226
star
6

matt-parker-five-letter-clique

Rust
45
star
7

devector

Resizable contiguous sequence container with fast appends on either end.
C++
37
star
8

recursive

Easy recursion in Rust, without stack overflows.
Rust
28
star
9

num-ord

A wrapper type for cross-type numeric comparisons.
Rust
27
star
10

peekread

Rust crate for making Read streams peekable.
Rust
26
star
11

ReducePing

ReducePing is a small utility to tune the "TcpAckFrequency" setting of Windows to get better latency in TCP networked games.
C
20
star
12

aoc2022

My Advent of Code 2022 solutions, in Rust.
Rust
20
star
13

golf-cpu

Reference implementation of the GOLF CPU.
Python
17
star
14

pyglfw

Python bindings for GLFW
C
16
star
15

PyGG2

A Python rewrite of Gang Garrison 2
Python
14
star
16

pyth5

Clean-sheet rewrite of Pyth.
Python
13
star
17

bitwise-binary-search

Accompanying code for https://orlp.net/blog/bitwise-binary-search/.
C++
12
star
18

dotfiles

My dotfiles.
HTML
10
star
19

pygrafix

pygrafix is a Python/Cython hardware-accelerated 2D graphics library.
C
10
star
20

xcharter

XCharter font build.
Python
10
star
21

vim-bunlink

A replacement for :bdelete that decouples the concept of 'deleting a buffer' from 'closing a window'.
Vim Script
9
star
22

libop

My personal C++ library.
Objective-C
8
star
23

aoc2023

My Advent of Code 2023 solutions, in Rust.
Rust
7
star
24

vim-quick-replace

A quick find/replace plugin for Vim.
Vim Script
6
star
25

secudht

A secure design and implementation of the Kademlia DHT.
C
6
star
26

sum-bench

This is the code accompanying https://orlp.net/blog/taming-float-sums/.
Rust
6
star
27

multilive

Multiple poe.trade live searches at once.
JavaScript
5
star
28

iwyu

A small utility that helps you include the right C++ headers.
Python
4
star
29

aoc2021

My Advent of Code 2021 solutions, in Rust.
Rust
4
star
30

commonc

Various common C algorithms and things
C
3
star
31

stable-alloc-shim

A stable Rust shim for the unstable Allocator API.
Rust
3
star
32

synth

A real-time self-hosting MIDI software synth written in Rust from scratch.
Rust
3
star
33

qcon

Quake-style console for windows.
AutoHotkey
3
star
34

ncUI

A lightweight user interface for World of Warcraft - DEAD
Lua
3
star
35

deps

deps is a minimalistic building system for any process which consists of smaller processes that depend on each other.
Python
2
star
36

euler

My solutions for Project Euler.
C++
1
star
37

osrs-fragment-calc

OSRS fragment set calculator
HTML
1
star
38

hades-boons

Python
1
star
39

picture-in-picture

Java
1
star
40

Robotics2020-Final

This repository hosts my final project for the 2020 Robotics course at Leiden university.
JavaScript
1
star
41

boost-win-builds

Some Windows builds for Boost.
Shell
1
star
42

lolpriority

Little tool for Leage of Legends, automatically puts the LoLClient.exe process on low priority when the in-game client is open for extra performance.
C
1
star
43

amazons

Web-based Game of the Amazons
CSS
1
star
44

distris

Distributed socializing.
C++
1
star
45

p

C++
1
star
46

poe-trade-qol

Quality of life for PoE's trade site.
JavaScript
1
star
47

poedps

A Path of Exile weapon DPS calculator with optional crafting.
JavaScript
1
star
48

StrongholdCoords

An application for finding out the exact coordinates of end portal frames in Minecraft seeds.
Java
1
star
49

unite-git-repo

A source for Unite.vim that lists all files from the git repository root.
Vim Script
1
star
50

pyflat

pyflat is a Python hardware-accelerated 2D graphics library.
C
1
star