#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; } } }