2 scm-hash.cc -- implement Scheme_hash_table
4 source file of the GNU LilyPond music typesetter
6 (c) 1999--2001 Han-Wen Nienhuys <hanwen@cs.uu.nl>
11 #include "scm-hash.hh"
12 #include "ly-smobs.icc"
15 Scheme_hash_table::Scheme_hash_table ()
21 Scheme_hash_table::Scheme_hash_table (Scheme_hash_table
const &src
)
28 Scheme_hash_table::operator = (Scheme_hash_table
const & src
)
30 Scm_stl_map::operator = (src
);
32 // we do not copy the self_scm () field!
36 Scheme_hash_table::mark_smob (SCM s
)
39 can't typecheck naively, since GC bit lives in CAR of S
42 Scheme_hash_table
*me
= (Scheme_hash_table
*) SCM_CELL_WORD_1 (s
);
44 for (Scm_stl_map::const_iterator i
= me
->begin (); i
!= me
->end (); i
++)
46 scm_gc_mark ((*i
).first
);
47 scm_gc_mark ((*i
).second
);
53 Scheme_hash_table::print_smob (SCM s
, SCM p
, scm_print_state
*)
57 sprintf (str
, "#<Scheme_hash_table 0x%0x ", s
);
59 Scheme_hash_table
*me
= unsmob (s
);
60 for (Scm_stl_map::const_iterator i
= me
->begin (); i
!= me
->end (); i
++)
62 scm_display ((*i
).first
, p
);
64 scm_display ((*i
).second
, p
);
72 Scheme_hash_table::try_retrieve (SCM k
, SCM
*v
)
74 Scm_stl_map ::const_iterator
i (find (k
));
75 bool found
= i
!= end ();
82 Scheme_hash_table::elem_b (SCM k
) const
84 Scm_stl_map::const_iterator
i (find (k
));
89 Scheme_hash_table::set (SCM k
, SCM v
)
96 Scheme_hash_table::get (SCM k
)const
98 return (* (Scheme_hash_table
*)this)[k
];
102 Scheme_hash_table::remove (SCM k
)
104 Scm_stl_map::erase (k
);
107 Scheme_hash_table::~Scheme_hash_table ()
112 Scheme_hash_table::to_alist () const
115 for (Scm_stl_map ::const_iterator i
= begin (); i
!= end (); i
++)
116 l
= gh_cons (gh_cons ((*i
).first
, (*i
).second
), l
);
122 IMPLEMENT_UNSMOB (Scheme_hash_table
,scheme_hash
);
123 IMPLEMENT_SMOBS (Scheme_hash_table
);
124 IMPLEMENT_DEFAULT_EQUAL_P (Scheme_hash_table
);