void NrIceCtx::SetStream(size_t index, NrIceMediaStream* stream) { if (index >= streams_.size()) { streams_.resize(index + 1); } RefPtr<NrIceMediaStream> oldStream(streams_[index]); streams_[index] = stream; if (oldStream) { oldStream->Close(); } }
// ------------------------------------------------------------------------------------------------ // CNSmlDataModBase::MergeL // Merges data from old item to new item. // ------------------------------------------------------------------------------------------------ void CNSmlDataModBase::MergeL( TDes8& aNewItem, const TDesC8& aOldItem,TBool aFieldLevel ) { TBool modified( EFalse ); CVersitParser* newItemParser = ChildCreateParserLC(); RDesReadStream newStream( aNewItem ); CleanupClosePushL( newStream ); newItemParser->InternalizeL( newStream ); CVersitParser* oldItemParser = ChildCreateParserLC(); RDesReadStream oldStream( aOldItem ); CleanupClosePushL( oldStream ); oldItemParser->InternalizeL( oldStream ); // Now we're ready to start analysis CArrayPtr<CVersitParser>* newEntities = newItemParser->ArrayOfEntities( EFalse ); CArrayPtr<CVersitParser>* oldEntities = oldItemParser->ArrayOfEntities( ETrue ); if( newEntities && oldEntities ) { CleanupPtrArrayPushL( oldEntities ); for( TInt i = 0; ( i < newEntities->Count() ) && ( i < oldEntities->Count() ); i++ ) { MergeEntityL( newEntities->At( i ), oldEntities->At( i ), modified, aFieldLevel ); } CleanupStack::PopAndDestroy(); // oldEntities } else { MergeEntityL( newItemParser, oldItemParser, modified, aFieldLevel ); } // Only update if anything was modified in process if ( modified ) { aNewItem.Zero(); RDesWriteStream dws( aNewItem ); CleanupClosePushL( dws ); newItemParser->ExternalizeL( dws ); dws.CommitL(); CleanupStack::PopAndDestroy(); // dws } CleanupStack::PopAndDestroy( 4 ); // oldStream, oldItemParser, newStream, newItemParser }