cstring_cache.rs 437 B

123456789101112131415161718192021
  1. use std::collections::HashMap;
  2. use std::ffi::{CString, CStr};
  3. pub struct CStringCache {
  4. cache: HashMap<String, CString>
  5. }
  6. impl CStringCache {
  7. pub fn new() -> CStringCache {
  8. CStringCache {
  9. cache: HashMap::new()
  10. }
  11. }
  12. pub fn intern(&mut self, string: &str) -> &CStr {
  13. self.cache.entry(string.to_owned()).or_insert_with(|| {
  14. CString::new(string).unwrap()
  15. })
  16. }
  17. }