zsh_module/
hashtable.rs

1use std::os::raw::c_char;
2
3use zsh_sys as zsys;
4
5use crate::to_cstr;
6
7/// A wrapper around Zsh's hashtable implementation
8pub struct HashTable {
9    raw: zsys::HashTable,
10}
11
12impl HashTable {
13    pub(crate) unsafe fn from_raw(raw: zsys::HashTable) -> Self {
14        Self { raw }
15    }
16    pub(crate) fn get(&self, name: &str) -> zsys::HashNode {
17        let name = to_cstr(name);
18        unsafe { self.raw_get(name.as_ptr()) }
19    }
20    pub(crate) fn remove(&self, name: &str) -> zsys::HashNode {
21        let name = to_cstr(name);
22        unsafe { self.raw_remove(name.as_ptr()) }
23    }
24    pub(crate) unsafe fn raw_get(&self, name: *const c_char) -> zsys::HashNode {
25        zsys::gethashnode(self.raw, name)
26    }
27    pub(crate) unsafe fn raw_remove(&self, name: *const c_char) -> zsys::HashNode {
28        zsys::removehashnode(self.raw, name)
29    }
30}