61 |
|
|
62 |
|
|
63 |
SCM |
SCM |
64 |
scm_hash_fn_get_handle (SCM table,SCM obj,unsigned long (*hash_fn)(),SCM (*assoc_fn)(),void * closure) |
scm_hash_fn_get_handle (SCM table, SCM obj, unsigned long (*hash_fn)(), SCM (*assoc_fn)(), void * closure) |
65 |
#define FUNC_NAME "scm_hash_fn_get_handle" |
#define FUNC_NAME "scm_hash_fn_get_handle" |
66 |
{ |
{ |
67 |
unsigned long k; |
unsigned long k; |
80 |
|
|
81 |
|
|
82 |
SCM |
SCM |
83 |
scm_hash_fn_create_handle_x (SCM table,SCM obj,SCM init,unsigned long (*hash_fn)(), |
scm_hash_fn_create_handle_x (SCM table, SCM obj, SCM init, unsigned long (*hash_fn)(), |
84 |
SCM (*assoc_fn)(),void * closure) |
SCM (*assoc_fn)(), void * closure) |
85 |
#define FUNC_NAME "scm_hash_fn_create_handle_x" |
#define FUNC_NAME "scm_hash_fn_create_handle_x" |
86 |
{ |
{ |
87 |
unsigned long k; |
unsigned long k; |
107 |
SCM old_bucket; |
SCM old_bucket; |
108 |
old_bucket = SCM_VELTS (table)[k]; |
old_bucket = SCM_VELTS (table)[k]; |
109 |
new_bucket = scm_acons (obj, init, old_bucket); |
new_bucket = scm_acons (obj, init, old_bucket); |
110 |
SCM_VELTS(table)[k] = new_bucket; |
SCM_VECTOR_SET (table, k, new_bucket); |
111 |
SCM_REALLOW_INTS; |
SCM_REALLOW_INTS; |
112 |
return SCM_CAR (new_bucket); |
return SCM_CAR (new_bucket); |
113 |
} |
} |
116 |
|
|
117 |
|
|
118 |
SCM |
SCM |
119 |
scm_hash_fn_ref (SCM table,SCM obj,SCM dflt,unsigned long (*hash_fn)(), |
scm_hash_fn_ref (SCM table, SCM obj, SCM dflt, unsigned long (*hash_fn)(), |
120 |
SCM (*assoc_fn)(),void * closure) |
SCM (*assoc_fn)(), void * closure) |
121 |
{ |
{ |
122 |
SCM it = scm_hash_fn_get_handle (table, obj, hash_fn, assoc_fn, closure); |
SCM it = scm_hash_fn_get_handle (table, obj, hash_fn, assoc_fn, closure); |
123 |
if (SCM_CONSP (it)) |
if (SCM_CONSP (it)) |
130 |
|
|
131 |
|
|
132 |
SCM |
SCM |
133 |
scm_hash_fn_set_x (SCM table,SCM obj,SCM val,unsigned long (*hash_fn)(), |
scm_hash_fn_set_x (SCM table, SCM obj, SCM val, unsigned long (*hash_fn)(), |
134 |
SCM (*assoc_fn)(),void * closure) |
SCM (*assoc_fn)(), void * closure) |
135 |
{ |
{ |
136 |
SCM it; |
SCM it; |
137 |
|
|
145 |
|
|
146 |
|
|
147 |
SCM |
SCM |
148 |
scm_hash_fn_remove_x (SCM table,SCM obj,unsigned long (*hash_fn)(),SCM (*assoc_fn)(), |
scm_hash_fn_remove_x (SCM table, SCM obj, unsigned long (*hash_fn)(), SCM (*assoc_fn)(), |
149 |
SCM (*delete_fn)(),void * closure) |
SCM (*delete_fn)(), void * closure) |
150 |
{ |
{ |
151 |
unsigned long k; |
unsigned long k; |
152 |
SCM h; |
SCM h; |
158 |
if (k >= SCM_VECTOR_LENGTH (table)) |
if (k >= SCM_VECTOR_LENGTH (table)) |
159 |
scm_out_of_range ("hash_fn_remove_x", scm_ulong2num (k)); |
scm_out_of_range ("hash_fn_remove_x", scm_ulong2num (k)); |
160 |
h = assoc_fn (obj, SCM_VELTS (table)[k], closure); |
h = assoc_fn (obj, SCM_VELTS (table)[k], closure); |
161 |
SCM_VELTS(table)[k] = delete_fn (h, SCM_VELTS(table)[k]); |
SCM_VECTOR_SET (table, k, delete_fn (h, SCM_VELTS(table)[k])); |
162 |
return h; |
return h; |
163 |
} |
} |
164 |
|
|
528 |
"table into an a-list of key-value pairs.") |
"table into an a-list of key-value pairs.") |
529 |
#define FUNC_NAME s_scm_hash_fold |
#define FUNC_NAME s_scm_hash_fold |
530 |
{ |
{ |
531 |
SCM_VALIDATE_PROC (1,proc); |
SCM_VALIDATE_PROC (1, proc); |
532 |
SCM_VALIDATE_VECTOR (3,table); |
SCM_VALIDATE_VECTOR (3, table); |
533 |
return scm_internal_hash_fold (fold_proc, (void *) SCM_UNPACK (proc), init, table); |
return scm_internal_hash_fold (fold_proc, (void *) SCM_UNPACK (proc), init, table); |
534 |
} |
} |
535 |
#undef FUNC_NAME |
#undef FUNC_NAME |