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