0ad/source/simulation/EntitySupport.cpp
janwas 73683b6109 # SwEng
. the massive renaming undertaking: camelCase functions -> PascalCase.
. add some cppdoc.
. minor additional renaming improvements: e.g. GetIsClosed -> IsClosed
. in entity code, replace constructs like "pvec = new vector; return
pvec; use *pvec; delete pvec" with a simple stack variable passed as
output parameter (avoid unnecessary dynamic allocs)
. timer: simpler handling of raw ticks vs normal timer (less #if)

This was SVN commit r5017.
2007-05-02 12:07:08 +00:00

124 lines
1.9 KiB
C++

#include "precompiled.h"
#include "EntitySupport.h"
bool CClassSet::IsMember( const CStrW& Test )
{
for(size_t i = 0; i < m_Members.size(); i++)
{
if(m_Members[i] == Test)
{
// Move to Front algo (currently disabled)
//std::swap(m_Members[0], m_Members[i]);
return true;
}
}
return false;
}
void CClassSet::Rebuild()
{
if( m_Parent )
m_Members = m_Parent->m_Members;
else
m_Members.clear();
Set newMembers;
for( size_t i=0; i<m_Members.size(); ++i )
{
const CStrW& member = m_Members[i];
for(size_t j=0; j<m_RemovedMembers.size(); j++)
{
if(m_RemovedMembers[j] == member)
goto end;
}
for(size_t j=0; j<m_AddedMembers.size(); j++)
{
if(m_AddedMembers[j] == member)
goto end;
}
newMembers.push_back(member);
end:;
}
for(size_t j=0; j<m_AddedMembers.size(); j++)
{
newMembers.push_back(m_AddedMembers[j]);
}
m_Members = newMembers;
}
CStrW CClassSet::GetMemberList()
{
Set::iterator it = m_Members.begin();
CStrW result = L"";
if( it != m_Members.end() )
{
result = *( it++ );
for( ; it != m_Members.end(); ++it )
result += L" " + *it;
}
return result;
}
void CClassSet::SetFromMemberList(const CStrW& list)
{
CStr entry;
CStr temp = list;
m_AddedMembers.clear();
m_RemovedMembers.clear();
while( true )
{
// Find the first ' ' or ',' in the string
int brk = temp.Find(' ');
int comma = temp.Find(',');
if( comma != -1 && ( brk == -1 || comma < brk ) )
{
brk = comma;
}
if( brk == -1 )
{
entry = temp;
}
else
{
entry = temp.substr( 0, brk );
temp = temp.substr( brk + 1 );
}
if( brk != 0 )
{
if( entry[0] == '-' )
{
entry = entry.substr( 1 );
if( ! entry.empty() )
m_RemovedMembers.push_back( entry );
}
else
{
if( entry[0] == '+' )
entry = entry.substr( 1 );
if( ! entry.empty() )
m_AddedMembers.push_back( entry );
}
}
if( brk == -1 )
{
break;
}
}
}