コード例 #1
0
void CharacterManager::LoadCharacters( moPropBagRef& charBag, Transactions::TransactionGroup::pointer_t group, const bool emit_signals )
{
	moPropArrayRef	array(f_arrayBagName);
	array.Link( charBag );
    assert(array.HasProp());

	const int count = array.CountIndexes();
	for( int idx = 0; idx < count; ++idx )
	{
		const int 		item_no  ( array.ItemNoAtIndex( idx ) );
		moPropSPtr		prop_ptr ( array.Get( item_no ) );
		moName			name	 ( prop_ptr->GetName()  );
		moPropBagRef	propBag(name);
		propBag.NewProp();
		propBag.GetProperty()->Copy( *prop_ptr );

		Combatant::Character::pointer_t ch( new Combatant::Character() );
		ch->Load( propBag );

		// Add "(copy)" in case of duplicates
		//
		Combatant::Character::pointer_t dup = FindDuplicates( ch );
		//
		while( dup )
		{
			ch->name( ch->name() + gettext(" (copy)") );
			dup = FindDuplicates( ch );
		}

		if( group )
		{
			// Add character via transaction.
			//
			Transactions::Transaction::pointer_t tr( new Transactions::AddCharacterTransaction( ch, emit_signals ) );
			tr->doit();
			group->addTransaction( tr );
		}
		else
		{
			// Add character directly
			//
			f_chars.push_back( ch );
		}
	}
}
コード例 #2
0
void CharacterManager::Insert( Combatant::Character::pointer_t ch, const bool signal )
{
	ch->deleted( false );
	//
	if( FindDuplicates( ch ) == 0 )
	{
		f_chars.push_back( ch );
		//
		if( signal )
		{
			f_changedSignal.emit();
			f_characterAddedSignal.emit( ch );
		}
	}
}
コード例 #3
0
ファイル: Array_FindDuplicates.C プロジェクト: sidpka/repo
int main(){
int arr[]={1,2,3,1,1,2,2,3,4,3,0,1,0};
int n=sizeof(arr)/sizeof(arr[0]);
FindDuplicates(arr,n);
return 0;
}