[CM] How to iterate through a hash-table in C?

bil at ccrma.Stanford.EDU bil at ccrma.Stanford.EDU
Tue Dec 8 02:45:19 PST 2020


I would use s7_iterate which underlies map and for-each:

     s7_pointer iter, hash, x;
     s7_int gc1, gc2;

     hash = s7_make_hash_table(sc, 8);
     gc1 = s7_gc_protect(sc, hash);
     s7_hash_table_set(sc, hash, s7_make_symbol(sc, "a"), 
s7_make_integer(sc, 1));
     s7_hash_table_set(sc, hash, s7_make_symbol(sc, "b"), 
s7_make_integer(sc, 2));

     iter = s7_make_iterator(sc, hash);
     gc2 = s7_gc_protect(sc, iter);

     x = s7_iterate(sc, iter);  /* (a . 1) */
     fprintf(stderr, "x: %s\n", s7_object_to_c_string(sc, x));
     x = s7_iterate(sc, iter);  /* (b . 2) */
     fprintf(stderr, "x: %s\n", s7_object_to_c_string(sc, x));
     x = s7_iterate(sc, iter);  /* #<eof> == end */
     fprintf(stderr, "x: %s\n", s7_object_to_c_string(sc, x));

     s7_gc_unprotect_at(sc, gc1);
     s7_gc_unprotect_at(sc, gc2);



More information about the Cmdist mailing list