X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fscm-hash.hh;h=6ced1f5e216e389a39f0cfed47939a8b342f00ac;hb=87eedcd59f4082cb0841528ad5bc82cb1d1191e3;hp=ae733e9df80a53acfe909c23b70d157fcb632fa0;hpb=9c8bcb9a2a1fedb5459e593b18a8c550318e6800;p=lilypond.git diff --git a/lily/include/scm-hash.hh b/lily/include/scm-hash.hh index ae733e9df8..6ced1f5e21 100644 --- a/lily/include/scm-hash.hh +++ b/lily/include/scm-hash.hh @@ -1,72 +1,60 @@ -/* +/* scm-hash.hh -- declare Scheme hasher. - + source file of the GNU LilyPond music typesetter - - (c) 1999--2000 Han-Wen Nienhuys - - */ + + (c) 1999--2007 Han-Wen Nienhuys +*/ #ifndef SCM_HASH_HH #define SCM_HASH_HH - -#include - -#include "lily-guile.hh" #include "smobs.hh" - -struct SCM_less -{ - bool operator () (SCM s1, SCM s2) const - { - return long(s1) < long (s2); - } -}; - -typedef map Scm_stl_map; - /** - auto resizing hash table. This should come from GUILE. + auto resizing hash table. 1. ALWAYS USE THIS AS VIA A POINTER, i.e. class Foo { - Scheme_hash_table * tab; + Scheme_hash_table * tab; }; and NOT class Foo { - Scheme_hash_table tab; + Scheme_hash_table tab; } 2. UPON DESTRUCTION, DO - scm_unprotect_object (tab->self_scm_); - - */ -class Scheme_hash_table : private Scm_stl_map + scm_gc_unprotect_object (tab->self_scm_); +*/ + +class Scheme_hash_table { public: bool try_retrieve (SCM key, SCM *val); - bool elem_b (SCM key) const; + bool contains (SCM key) const; /** WARNING: putting something in assumes responsibility for cleaning up. */ void set (SCM k, SCM v); - SCM get (SCM k) const; - + SCM get (SCM k) const; + void remove (SCM k); Scheme_hash_table (); - void operator = (Scheme_hash_table const &); + void operator = (Scheme_hash_table const &); Scheme_hash_table (Scheme_hash_table const &); SCM to_alist () const; - DECLARE_SMOBS(Scheme_hash_table,foo); +private: + SCM hash_tab_; + unsigned elt_count_; + + DECLARE_SMOBS (Scheme_hash_table); }; #endif /* SCM_HASH_HH */