hash_map* lat_clonar_hash(lat_vm* vm, hash_map* h) { int c = 0; hash_map* ret = make_hash_map(); list_node* l; for (c = 0; c < 256; ++c) { l = h->buckets[c]; if (l != NULL) { ret->buckets[c] = lat_crear_lista(); if (l != NULL) { list_node* cur; for (cur = l->next; cur != NULL; cur = cur->next) { if (cur->data != NULL) { hash_val* hv = (hash_val*)lat_asignar_memoria(sizeof(hash_val)); //vm->memory_usage += sizeof(hash_val); strncpy(hv->key, ((hash_val*)cur->data)->key, 256); hv->val = lat_clonar_objeto(vm, (lat_objeto*)((hash_val*)cur->data)->val); insert_list(ret->buckets[c], hv); } } } } } return ret; }
solid_object *solid_instance(solid_vm *vm) { solid_object *ret = solid_make_object(vm); ret->type = T_INSTANCE; ret->data_size = sizeof(hash_map); ret->data = (void *) make_hash_map(); return ret; }
lat_objeto* lat_instancia(lat_vm* vm) { lat_objeto* ret = lat_crear_objeto(vm); ret->type = T_INSTANCE; ret->data_size = sizeof(hash_map*); ret->data.instance = make_hash_map(); return ret; }
void initialize_projectile() { PROJECTILES = make_list(); PROJECTILE_PROTOTYPES = make_hash_map(); __api_projectile_tag = scm_make_smob_type("projectile", sizeof(projectile)); scm_c_define_gsubr("build-projectile-prototype", 6, 0, 0, __api_build_projectile_prototype); scm_c_define_gsubr("make-projectile", 5, 0, 0, __api_make_projectile); scm_c_define_gsubr("spawn-projectile", 1, 0, 0, __api_spawn_projectile); load_all("script/projectiles"); }
hash_map *copy_hash(hash_map *m) { hash_map *ret = make_hash_map(); int i; for (i = 0; i < 256; i++) { list_node *c = m->buckets[i]; if (c != NULL) { for (; c->next != NULL; c = c->next) { if (c->data != NULL) { set_hash(ret, ((hash_val *)c->data)->key, ((hash_val *)c->data)->val); } } } } return ret; }