Example #1
0
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);
}
Example #2
0
void
keywords_clear()
{
	int i;

	for (i = 0; i < ARRAY_LENGTH(&keywords); i++)
		xfree(ARRAY_ITEM(&keywords, i));

	ARRAY_CLEAR(&keywords);
}
Example #3
0
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);
}