dict (Hmap), C dilinde yazılmış, hafif ve sağlam bir sözlük (hash tablosu) kütüphanesidir. Anahtar-değer depolama imkanı sunan bu kütüphane, int, double ve derin kopyalanan string gibi çeşitli değer tiplerini destekler. Çift hash (double hashing) kullanarak çakışmaları çözer ve açık bellek sahipliği semantiği ile çalışır. Kütüphane, öngörülebilir, bellek açısından güvenli (Valgrind ile temiz) ve düşük seviyeli veya gömülü sistem tarzı C projeleri için uygun olacak şekilde tasarlanmıştır. Sabit kapasiteli bir yapıya sahiptir, yani örtük yeniden boyutlandırma yapmaz ve açık adresleme ile çift hash yöntemini kullanarak çakışmaları bağlı listeler veya "tombstone" kullanmadan çözer. Bu sayede, ortalama durumda O(1) arama ve ekleme performansı sunar.
Kütüphane, dict_create ile oluşturulur ve dict_put_int, dict_put_double, dict_put_string gibi fonksiyonlarla anahtar-değer çiftleri eklenir. Anahtarlar ve değerler dahili olarak derin kopyalanır. dict_get ile değerler alınabilirken, dict_upd_int gibi fonksiyonlarla mevcut değerler güncellenebilir; tip uyuşmazlıkları hata olarak rapor edilir. dict_take fonksiyonu, bir girdiyi sözlükten kaldırır ve değerin kopyasını çağırana verir, böylece çağırıcı bu değerin sahipliğini üstlenir. Bellek sızıntılarını önlemek için dict_destroy fonksiyonunun çağrılması zorunludur. Kütüphane, dahili hataları açık bir hata sistemiyle yönetir ve assert() kullanarak iç tutarlılığı sağlar, bu da geliştirme sırasında hataları yakalamaya yardımcı olur.
Hmap'in bazı kısıtlamaları da bulunmaktadır: sabit kapasiteli olması, anahtarların null ile sonlanan dizeler olması ve çoklu iş parçacığı (thread-safe) desteği sunmaması. Bu tasarım tercihleri, uygulamanın basit ve öngörülebilir kalmasını sağlamak amacıyla yapılmıştır. Kütüphane, Valgrind gibi araçlarla bellek güvenliği açısından test edilmiş ve doğru kullanıldığında temiz sonuçlar vermektedir, bu da onu kritik düşük seviyeli uygulamalar için güvenilir bir seçenek haline getirir.
C dilinde düşük seviyeli ve gömülü sistem projeleri için bellek güvenli, öngörülebilir ve yüksek performanslı bir anahtar-değer depolama çözümü sunar.