This commit adds a new datatype: the quickmap. It provides an extremely fast but relatively high collision string hash to whatever key hashmap. This is optimized purely for variable names, and is intended to use for variable name lookup during (eval ...) or (string->symbol ...) if I must implement that. The hashmap is bucketed, with a set number of buckets (199 in this case). Each bucket is preallocated at initialization containing an empty vector. There will only ever be one of these initialized as it is only to contain globally accessible names. The interface provides new, get, remove, contains_key, insert, and an iterator implementation. Unit tests are included and CI is updated. Signed-off-by: Ava Affine <ava@sunnypup.io>
31 lines
979 B
Rust
31 lines
979 B
Rust
/* Mycelium Scheme
|
|
* Copyright (C) 2025 Ava Affine
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#![cfg_attr(not(test), no_std)]
|
|
#![feature(let_chains)]
|
|
#![feature(iter_collect_into)]
|
|
#![feature(if_let_guard)]
|
|
#![feature(core_float_math)]
|
|
|
|
pub mod sexpr;
|
|
pub mod lexer;
|
|
pub mod parser;
|
|
pub mod number;
|
|
pub mod stackstack;
|
|
pub mod hmap;
|
|
|
|
extern crate alloc;
|