Example #1
0
	void Array::resize(std::size_t s)
	{
		AIO_PRE_CONDITION(valid());

		Type t = type();
		TypeMethods& methods = t.methods();

		std::size_t new_size = s * type().payload();
		if (s < size())
		{
			if (!t.isPod())
			{
				for (byte* p = m_imp->data.data() + m_imp->data.size() - type().payload()
						; p >= m_imp->data.data() + new_size; p -= type().payload())
				{
					methods.destruct(CommonObject(t, p));
				}
			}
			m_imp->data.resize(new_size);
		}
		if(s > size())
		{
			std::size_t old_size = m_imp->data.size();
			m_imp->data.resize(new_size);

			//TODO: need exception safe
			for (byte* p = m_imp->data.data() + old_size
					; p != m_imp->data.data() + m_imp->data.size(); p += type().payload())
			{
				methods.construct(CommonObject(t, p), get_heap(), get_ext_heap());
			}
		}
	}
Example #2
0
	void Array::push_back(ConstCommonObject obj)
	{
		AIO_PRE_CONDITION(valid());
		AIO_PRE_CONDITION(obj.type() == type());
		std::size_t old_size = m_imp->data.size();
		//TODO:not safe if object hold a pointer to itself.
		m_imp->data.resize(old_size + type().payload());
		byte* p = m_imp->data.data() + old_size;
		if (!type().isPod())
			type().methods().construct(CommonObject(type(), p), get_heap(), get_ext_heap());
		type().methods().assign(obj, CommonObject(type(), p) );

	}
Example #3
0
	void Array::insert(Array::iterator pos, ConstCommonObject obj)
	{
		AIO_PRE_CONDITION(valid());
        std::size_t s = size();

		Type t = type();
		std::size_t idx = (pos - begin()) * t.payload();
		//TODO:not safe if object hold a pointer to itself.
		m_imp->data.insert(m_imp->data.begin() + idx, t.payload(), byte());
		if (!type().isPod())
			type().methods().construct(CommonObject(type(), m_imp->data.data() + idx), get_heap(), get_ext_heap());
		type().methods().assign(obj, CommonObject(type(), m_imp->data.data() + idx) );

        AIO_POST_CONDITION(size() == s + 1);
	}
void SceneObjectManager::ReloadSceneObject(sgp::ISGPObject* pObj)
{
	CWaitCursor cursor;

	std::vector<ISGPObject*>& objVector=WorldMapManager::GetInstance()->GetWorldObjects();
	CString sMF1FileName=pObj->m_MF1FileName;
	std::vector<ISGPObject*> reloadObjVector;
	uint32 i;
	for(i=0;i<objVector.size();++i)
	{
		if(sMF1FileName==objVector[i]->m_MF1FileName) reloadObjVector.push_back(objVector[i]);
	}
	for(i=0;i<reloadObjVector.size();++i) EngineDeleteSceneObject(CommonObject(reloadObjVector[i]));
	for(i=0;i<reloadObjVector.size();++i) EngineAddSceneObject(CommonObject(reloadObjVector[i]));
	WorldEditorRenderInterface::GetInstance()->GetWorldSystemManager()->initializeQuadTree();
}
void SceneObjectManager::ReloadSceneObject(const std::vector<CommonObject>& objVector)
{
	CWaitCursor cursor;

	uint32 i,j;
	std::set<CString> mf1Set;
	for(i=0;i<objVector.size();++i)
	{
		ASSERT(objVector[i].IsMF1());
		mf1Set.insert(CString(objVector[i].m_pObj->m_MF1FileName));
	}

	std::vector<ISGPObject*>& allObjVec=WorldMapManager::GetInstance()->GetWorldObjects();
	std::set<CString>::iterator iter;
	for(iter=mf1Set.begin();iter!=mf1Set.end();++iter)
	{
		CString mf1Name=*iter;
		std::vector<CommonObject> reloadObjVector;
		for(i=0;i<allObjVec.size();++i)
		{
			if(mf1Name==allObjVec[i]->m_MF1FileName) reloadObjVector.push_back(CommonObject(allObjVec[i]));	
		}
		for(j=0;j<reloadObjVector.size();++j) EngineDeleteSceneObject(reloadObjVector[j]);
		for(j=0;j<reloadObjVector.size();++j) EngineAddSceneObject(reloadObjVector[j]);
	}
	WorldEditorRenderInterface::GetInstance()->GetWorldSystemManager()->initializeQuadTree();
}
Example #6
0
	void Array::pop_back()
	{
		AIO_PRE_CONDITION(valid());
		AIO_PRE_CONDITION(!empty());
		std::size_t new_size = m_imp->data.size() - type().payload();
		if (!type().isPod())
			type().methods().destruct(CommonObject(type(), m_imp->data.data() + new_size));
		m_imp->data.resize(new_size);
	}
Example #7
0
	void Array::clear()
	{
		AIO_PRE_CONDITION(valid());

        Type t = type();
        if (!t.isPod() && !empty())
        {
            TypeMethods& methods = t.methods();
            for (byte* p = m_imp->data.data() + m_imp->data.size() - type().payload()
                ; p >= m_imp->data.data(); p -= type().payload())
            {
                methods.destruct(CommonObject(t, p));
            }
        }
        m_imp->data.clear();
	}