X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fscm-hash.hh;h=f3134127faca6bf5f4b86afa608b862439248105;hb=26253bd2625f96bdaed6689668d7c5ff1a98f132;hp=0a15bfce9a99a67785295249db04bff9d53a20ee;hpb=cc288cebe296287d2f99c517869f96c646677f37;p=lilypond.git diff --git a/lily/include/scm-hash.hh b/lily/include/scm-hash.hh index 0a15bfce9a..f3134127fa 100644 --- a/lily/include/scm-hash.hh +++ b/lily/include/scm-hash.hh @@ -3,39 +3,64 @@ source file of the GNU LilyPond music typesetter - (c) 1999 Han-Wen Nienhuys + (c) 1999--2005 Han-Wen Nienhuys */ #ifndef SCM_HASH_HH #define SCM_HASH_HH -#include "lily-guile.hh" -#include "hash-table.hh" + #include "smobs.hh" + /** - 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; + }; + + and NOT + + class Foo { + Scheme_hash_table tab; + } + + + 2. UPON DESTRUCTION, DO + + scm_gc_unprotect_object (tab->self_scm_); + */ -class Scheme_hash_table : private Hash_table -{ + +class Scheme_hash_table +{ public: - // bool elem_b (SCM k) const; - Hash_table::try_retrieve; - Hash_table::elem_b; + bool try_retrieve (SCM key, SCM *val); + 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; - + void remove (SCM k); Scheme_hash_table (); void operator = (Scheme_hash_table const &); Scheme_hash_table (Scheme_hash_table const &); - virtual ~Scheme_hash_table (); - DECLARE_SMOBS; + SCM to_alist () const; + +private: + SCM hash_tab_; + unsigned elt_count_; + + DECLARE_SMOBS (Scheme_hash_table, foo); }; + #endif /* SCM_HASH_HH */