2 scm-hash.cc -- implement Scheme_hash_table
4 source file of the GNU LilyPond music typesetter
6 (c) 1999--2000 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::~Scheme_hash_table( )
107 Scheme_hash_table::to_alist () const
110 for (Scm_stl_map ::const_iterator i
= begin (); i
!= end(); i
++)
111 l
= gh_cons (gh_cons ((*i
).first
, (*i
).second
), l
);
117 IMPLEMENT_UNSMOB(Scheme_hash_table
,scheme_hash
);
118 IMPLEMENT_SMOBS(Scheme_hash_table
);
119 IMPLEMENT_DEFAULT_EQUAL_P(Scheme_hash_table
);