コード例 #1
0
ファイル: pstring.cpp プロジェクト: NULUSIOS/mame
pstr_t *pstring_t<F>::salloc(int n)
{
	if (stk == nullptr)
		stk = palloc_array(std::stack<pstr_t *>, 17);
	pstr_t *p;
	unsigned sn= ((32 - countleadbits(n)) + 1) / 2;
	unsigned size = sizeof(pstr_t) + ((UINT64) 1<<(sn * 2)) + 1;
	if (stk[sn].empty())
		p = (pstr_t *) palloc_array(char, size);
	else
	{
コード例 #2
0
ファイル: pstring.cpp プロジェクト: NULUSIOS/mame
void pstring_t<F>::sfree(pstr_t *s)
{
	s->m_ref_count--;
	if (s->m_ref_count == 0 && s != &m_zero)
	{
		if (stk != nullptr)
		{
			unsigned sn= ((32 - countleadbits(s->len())) + 1) / 2;
			stk[sn].push(s);
		}
		else
			pfree_array(((char *)s));
		//_mm_free(((char *)s));
	}
}
コード例 #3
0
ファイル: pstring.cpp プロジェクト: antonioginer/mame
void pstring_t<F>::sfree(pstr_t *s)
{
	if (s != nullptr)
	{
		bool b = s->dec_and_check();
		if ( b && s != &m_zero)
		{
			if (stk != nullptr)
			{
				size_type sn= ((32 - countleadbits(s->len())) + 1) / 2;
				stk[sn].push(s);
			}
			else
				plib::pfree_array(reinterpret_cast<char *>(s));
		}
	}
}
コード例 #4
0
ファイル: pstring.cpp プロジェクト: antonioginer/mame
pstr_t *pstring_t<F>::salloc(std::size_t n)
{
	if (stk == nullptr)
		stk = plib::palloc_array<std::stack<pstr_t *>>(17);
	pstr_t *p;
	std::size_t sn= ((32 - countleadbits(n)) + 1) / 2;
	std::size_t size = sizeof(pstr_t) + (static_cast<std::size_t>(1)<<(sn * 2)) + 1;
	if (stk[sn].empty())
		p = reinterpret_cast<pstr_t *>(plib::palloc_array<char>(size));
	else
	{
		p = stk[sn].top();
		stk[sn].pop();
	}

	//  str_t *p = (str_t *) mm_malloc(size, 8);
	p->init(n);
	return p;
}