void stringheap::clear() { ARRAY_CLEAR(m_todelete); for (const fkhashmap<const char *, stringele>::ele * p = m_shh.first(); p != 0; p = m_shh.next()) { stringele * e = p->t; if (!e->sysref) { safe_fkfree(m_fk, e->s); if (ARRAY_SIZE(m_todelete) >= ARRAY_MAX_SIZE(m_todelete)) { size_t newsize = ARRAY_MAX_SIZE(m_todelete) + 1 + ARRAY_MAX_SIZE(m_todelete) * (m_fk->cfg.array_grow_speed) / 100; ARRAY_GROW(m_todelete, newsize, const char *); } ARRAY_PUSH_BACK(m_todelete); ARRAY_BACK(m_todelete) = p->k; } } for (int i = 0; i < (int)ARRAY_SIZE(m_todelete); i++) { const char * str = ARRAY_GET(m_todelete, i); m_shh.del(str); } ARRAY_CLEAR(m_todelete); }
void keywords_clear() { int i; for (i = 0; i < ARRAY_LENGTH(&keywords); i++) xfree(ARRAY_ITEM(&keywords, i)); ARRAY_CLEAR(&keywords); }
void processor::run() { while (m_routine_num > 0) { for (int i = 0; i < (int)ARRAY_SIZE(m_pl.l); i++) { pool<routine>::node * n = ARRAY_GET(m_pl.l, i); if (UNLIKE(!n)) { continue; } // 注意:此函数内部可能会调用到add接口 ROUTINE_RUN(n->t, m_fk->cfg.per_frame_cmd_num); if (UNLIKE(ROUTINE_ISEND(n->t))) { POOL_PUSH(m_pl.p, n); ARRAY_GET(m_pl.l, i) = 0; m_routine_num--; } } } ARRAY_CLEAR(m_pl.l); }