#typemap #hash-map

ttmap

Trivial implementation of type map

6 releases

0.3.0 Nov 24, 2023
0.2.1 Sep 8, 2022
0.2.0 Dec 22, 2021
0.1.2 Jun 4, 2020
0.1.0 Jan 18, 2020

#851 in Data structures

Download history 9/week @ 2024-06-22 138/week @ 2024-06-29 4/week @ 2024-07-06 52/week @ 2024-07-13 48/week @ 2024-07-20 74/week @ 2024-07-27 99/week @ 2024-08-03 17/week @ 2024-08-10 168/week @ 2024-08-17 7/week @ 2024-08-24 13/week @ 2024-08-31 25/week @ 2024-09-07 17/week @ 2024-09-14 64/week @ 2024-09-21 111/week @ 2024-09-28

218 downloads per month

BSL-1.0 license

15KB
328 lines

ttmap (Trivial Type Map)

Crates.io Documentation Build

Trivial type-map implementation

Implementation uses type erased values with type as index. Due to limitation of TypeId only types without non-static references are supported. (in future it can be changed)

Type erasure

Each inserted value is stored on heap, with type erased pointer, using type as key. When value is retrieved, type information is used as key and pointer is casted to corresponding the type. This is safe, because Rust allows cast back and forth between pointers as long as the pointer actually points to the type (which is the case).

Static references are allowed, but in current implementation are stored on heap. It might be changed in future.

Hash implementation

The map uses simplified Hasher that relies on fact that TypeId produces unique values only. In fact there is no hashing under hood, and type's id is returned as it is.

Requirements:

  • alloc with enabled global allocator

No runtime deps