X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fscm-hash.hh;h=d14997676add36b8419b022bec71513e7c539b54;hb=47db9a3883d726ca53e2133a3b2298f78dd6a32e;hp=0a15bfce9a99a67785295249db04bff9d53a20ee;hpb=cc288cebe296287d2f99c517869f96c646677f37;p=lilypond.git diff --git a/lily/include/scm-hash.hh b/lily/include/scm-hash.hh index 0a15bfce9a..d14997676a 100644 --- a/lily/include/scm-hash.hh +++ b/lily/include/scm-hash.hh @@ -1,41 +1,67 @@ -/* - scm-hash.hh -- declare Scheme hasher. - - source file of the GNU LilyPond music typesetter - - (c) 1999 Han-Wen Nienhuys - - */ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 1999--2015 Han-Wen Nienhuys + + LilyPond is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + LilyPond is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with LilyPond. If not, see . +*/ #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. - */ -class Scheme_hash_table : private Hash_table +/* + 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 : public Smob { public: - // bool elem_b (SCM k) const; - Hash_table::try_retrieve; - Hash_table::elem_b; - /** - WARNING: putting something in assumes responsibility for cleaning - up. */ + int print_smob (SCM, scm_print_state *); + SCM mark_smob (); + virtual ~Scheme_hash_table (); + bool try_retrieve (SCM key, SCM *val); + bool contains (SCM key) const; 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 &); - virtual ~Scheme_hash_table (); - DECLARE_SMOBS; SCM to_alist () const; + +private: + SCM hash_tab_; + void copy (Scheme_hash_table const &src); }; #endif /* SCM_HASH_HH */ -