1 #include <lunaix/changeling.h>
2 #include <lunaix/mm/valloc.h>
4 #include <klibc/string.h>
6 static DEFINE_LLIST(chrysallidis);
7 static unsigned int current_id = 0;
10 changeling_init(morph_t* parent, morph_t* chlg,
11 unsigned int id, const char* name)
16 chlg->uid = current_id++;
18 changeling_setname(chlg, name);
21 llist_append(&chrysallidis, &chlg->sibs);
23 llist_append(&parent->subs, &chlg->sibs);
26 llist_init_head(&chlg->subs);
30 changeling_spawn(morph_t* parent, const char *name)
34 changeling = valloc(sizeof(morph_t));
35 changeling_init(parent, changeling, chlg_anon, name);
41 changeling_find(morph_t* parent, struct hstr* str)
44 llist_for_each(p, n, &parent->subs, sibs)
46 if (HSTR_EQ(&p->name, str)) {
55 changeling_get_at(morph_t* parent, int index)
58 llist_for_each(p, n, &parent->subs, sibs)
69 changeling_setname(morph_t* chlg, const char* name)
72 chlg->name = HSTR(name, strlen(name));
73 hstr_rehash(&chlg->name, HSTR_FULL_HASH);
75 chlg->name = HHSTR(NULL, 0, 0);