diff -r f345bda72bc4 -r 43e37759235e Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/circularbuffer_8cpp-source.html --- a/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/circularbuffer_8cpp-source.html Tue Mar 30 11:56:28 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,399 +0,0 @@ - - -TB10.1 Example Applications: examples/Base/BufsAndStrings/circularbufferexample/circularbuffer.cpp Source File - - - - -

examples/Base/BufsAndStrings/circularbufferexample/circularbuffer.cpp

Go to the documentation of this file.
00001 // Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-00002 // All rights reserved.
-00003 // This component and the accompanying materials are made available
-00004 // under the terms of "Eclipse Public License v1.0"
-00005 // which accompanies this distribution, and is available
-00006 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
-00007 //
-00008 // Initial Contributors:
-00009 // Nokia Corporation - initial contribution.
-00010 //
-00011 // Contributors:
-00012 //
-00013 // Description:
-00014 // This example program demonstrates the circular buffer API.
-00015 //
-00016 
-00017 
-00018 
-00022 #include "circularbuffer.h"
-00023 
-00024 // Literals.
-00025 _LIT(KPressAKey, "\n\tPress any key to continue....");
-00026 _LIT(KConstruct,"\n\n ****Construct****");
-00027 _LIT(KAdd,"\n ****Add objects****\n");
-00028 _LIT(KNumberOfObjects,"\nNumber of objects in the circular buffer: %d\n");
-00029 _LIT(KAddFailed,"\nElement cannot be added because the circular buffer is full\n");
-00030 _LIT(KRemove,"\n ****Remove objects****\n"); 
-00031 
-00032 
-00036 TMyClass::TMyClass(){};
-00040 TMyClass::TMyClass(const TDesC& aDes)
-00041         { 
-00042         iBuf = aDes;
-00043         }
-00048 const TDesC& TMyClass::GetBuf()
-00049         {
-00050         return iBuf;
-00051         }
-00056 void TMyClass::SetBuf(const TDesC& aDes)
-00057         {
-00058         iBuf = aDes;
-00059         }
-00060         
-00064 CCircularBufferExample::CCircularBufferExample()
-00065         {
-00066         }
-00067 
-00071 void CCircularBufferExample::ConstructL()
-00072         {
-00073         _LIT(KTitle, "Circular Buffer Example" );
-00074         iConsole = Console::NewL(KTitle, TSize(KConsFullScreen, KConsFullScreen));
-00075         
-00076         _LIT(KWelcome, "\n   Welcome to the circular buffer example application");
-00077         iConsole->Printf(KWelcome);
-00078         
-00079         _LIT(KPressAKeyMsg, "\n\n Press any key to step through the example\n");
-00080         iConsole->Printf(KPressAKeyMsg );
-00081         iConsole->Getch();
-00082         }
-00083 
-00087 CCircularBufferExample::~CCircularBufferExample()
-00088         {
-00089         delete iConsole;
-00090         }
-00091 
-00097 CCircularBufferExample* CCircularBufferExample::NewL()
-00098         {
-00099         CCircularBufferExample* self=new(ELeave)CCircularBufferExample();
-00100         CleanupStack::PushL(self);
-00101         self->ConstructL();
-00102         CleanupStack::Pop(self);
-00103         return self;
-00104         }
-00108 void CCircularBufferExample::CircularBufferOfIntsL()
-00109         {
-00110         _LIT(KCircularBufferForInt,"\n *****Circular buffer for integers*****");
-00111         iConsole->Printf(KCircularBufferForInt);
-00112         
-00113         // Creates a circular buffer containing integers.
-00114         CCirBuffer* circularBuffer = new(ELeave)CCirBuffer;
-00115         // Push the circular buffer onto the cleanup stack.
-00116         CleanupStack::PushL(circularBuffer);
-00117         const TInt KMaxElements = 4;
-00118         // Sets the maximum capacity of this circular buffer.
-00119         circularBuffer->SetLengthL(KMaxElements);  // Maximum capacity is KMaxElements.
-00120                 
-00121         iConsole->Printf(KConstruct);
-00122         _LIT(KConstructCircularBuffer, "\n Construction of circular buffer containing integers is successful");
-00123         iConsole->Printf(KConstructCircularBuffer);             
-00124 
-00125         
-00126         iConsole->Printf(KAdd);
-00127         TUint element[6]= {1, 2, 3, 4, 5, 6};
-00128         iConsole->Printf(KNumberOfObjects, circularBuffer->Count());
-00129                 
-00130         _LIT(KAddedElements,"Added Element: %d\n");
-00131         TInt result=circularBuffer->Put(element[0]); // Add integers to the circular buffer.
-00132         User::LeaveIfError(result);
-00133         iConsole->Printf(KAddedElements,element[0]);
-00134         iConsole->Printf(KNumberOfObjects, circularBuffer->Count());            
-00135         
-00136         // Add multiple integers to the circular buffer.
-00137         TUint numberOfObjects= 3;
-00138         for(TUint index=1;index<=numberOfObjects; index++)
-00139                 {
-00140                 result= circularBuffer->Put(element[index]);
-00141                 User::LeaveIfError(result);
-00142                 // Print the element added to the circular buffer.
-00143                 iConsole->Printf(KAddedElements,element[index]);
-00144                 iConsole->Printf(KNumberOfObjects, circularBuffer->Count());                    
-00145                 }
-00146         
-00147         _LIT(KAddIntegersToCircularBuffer,"\nAdding integers to circular buffer is successful");
-00148         iConsole->Printf(KAddIntegersToCircularBuffer);
-00149         
-00150         iConsole->Printf(KPressAKey);
-00151         iConsole->Getch();
-00152         
-00153         _LIT(KTryingAddToCircularBuffer,"\nTrying to add when buffer is full.");
-00154         iConsole->Printf(KTryingAddToCircularBuffer);
-00155         result=circularBuffer->Put(element[4]);
-00156         ASSERT(result == KErrGeneral);
-00157         iConsole->Printf(KAddFailed);
-00158         
-00159         // Remove integers from circular buffer.
-00160         iConsole->Printf(KRemove);
-00161         iConsole->Printf(KNumberOfObjects, circularBuffer->Count());
-00162 
-00163         result = circularBuffer->Get();
-00164         _LIT(KElementRemoved,"Removed Element: %d\n");
-00165         User::LeaveIfError(result);
-00166         ASSERT( (TUint) result == element[0]);
-00167         // Print the element removed from the circular buffer.
-00168         iConsole->Printf(KElementRemoved, result);
-00169         iConsole->Printf(KNumberOfObjects, circularBuffer->Count());
-00170         
-00171 
-00172         result = circularBuffer->Get();
-00173         User::LeaveIfError(result);
-00174         ASSERT((TUint)result == element[1]);
-00175         // Print the element removed from the circular buffer.
-00176         iConsole->Printf(KElementRemoved, result);
-00177         iConsole->Printf(KNumberOfObjects, circularBuffer->Count());
-00178         
-00179         //Add remaining elements from array to buffer.
-00180         for(TUint index=4;index<=5; index++)
-00181                 {
-00182                 result= circularBuffer->Put(element[index]);
-00183                 User::LeaveIfError(result);
-00184                 iConsole->Printf(KAddedElements,element[index]);
-00185                 iConsole->Printf(KNumberOfObjects, circularBuffer->Count());
-00186                 }
-00187         iConsole->Printf(KPressAKey);
-00188         iConsole->Getch();
-00189         _LIT(KNewLine,"\n");
-00190         iConsole->Printf(KNewLine);
-00191         // Remove multiple integers from the circular buffer.
-00192         for(TUint index=2;index<=5; index++)
-00193                 {
-00194                 result= circularBuffer->Get();// Removed integer is element[index].
-00195                 User::LeaveIfError(result);
-00196                 ASSERT((TUint)result == element[index]);
-00197                 // Print the elements removed from the circular buffer.
-00198                 iConsole->Printf(KElementRemoved,result);
-00199                 iConsole->Printf(KNumberOfObjects, circularBuffer->Count());
-00200                 }
-00201 
-00202         _LIT(KRemoveIntegersFromCircularBuffer,"\nRemoving integers from the circular buffer is successful");
-00203         iConsole->Printf(KRemoveIntegersFromCircularBuffer);
-00204         iConsole->Printf(KPressAKey);
-00205         iConsole->Getch();
-00206 
-00207         //Pop the circular buffer off the cleanup stack and destroy it.
-00208         CleanupStack::PopAndDestroy(circularBuffer);
-00209         }
-00210 
-00215 void CCircularBufferExample::CircularBufferOfMyObjectsL()
-00216         {
-00217         _LIT(KCircularBufferForMyObject,"\n *****Circular buffer of objects of user defined class TMyClass*****");
-00218         iConsole->Printf(KCircularBufferForMyObject);
-00219                 
-00220         // Create a circular buffer containing instances of TMyClass.
-00221         CCirBuf<TMyClass>* circularBuffer=new(ELeave) CCirBuf<TMyClass>;
-00222         // Push the circular buffer onto the cleanup stack.
-00223         CleanupStack::PushL(circularBuffer);
-00224         // Set the maximum capacity of this circular buffer.
-00225         const TInt KMaxElements = 4;
-00226         circularBuffer->SetLengthL(KMaxElements); // Maximum capacity is KMaxElements.
-00227         iConsole->Printf(KConstruct);
-00228         
-00229         _LIT(KConstructCircularBufferForMyObject, "\n Construction of circular buffer of user defined class is successful\n");
-00230         iConsole->Printf(KConstructCircularBufferForMyObject);  
-00231         
-00232         iConsole->Printf(KAdd);
-00233         // Creates an array of object of TMyClass.      
-00234         TMyClass myObjectsToAdd[6];
-00235 
-00236         _LIT(KBuffer1,"first");
-00237         myObjectsToAdd[0].SetBuf(KBuffer1);
-00238         _LIT(KBuffer2,"second");
-00239         myObjectsToAdd[1].SetBuf(KBuffer2);
-00240         _LIT(KBuffer3,"third");
-00241         myObjectsToAdd[2].SetBuf(KBuffer3);
-00242         _LIT(KBuffer4,"fourth");
-00243         myObjectsToAdd[3].SetBuf(KBuffer4);
-00244         _LIT(KBuffer5,"fifth");
-00245         myObjectsToAdd[4].SetBuf(KBuffer5);
-00246         _LIT(KBuffer6,"sixth");
-00247         myObjectsToAdd[5].SetBuf(KBuffer6);
-00248         
-00249         _LIT(KAddedMyObjectElements,"\nTMyClass object added is: ");
-00250         _LIT(KPrintMsgFormat," \"%S\" ");
-00251         
-00252         TInt result= circularBuffer->Add(&myObjectsToAdd[0]); // Add a TMyClass to the circular buffer.
-00253         User::LeaveIfError(result);
-00254         ASSERT(result==1);
-00255         iConsole->Printf(KAddedMyObjectElements);
-00256         iConsole->Printf(KPrintMsgFormat,&(myObjectsToAdd[0].GetBuf()));
-00257         iConsole->Printf(KNumberOfObjects, circularBuffer->Count());
-00258         
-00259         
-00260         _LIT(KAddedMultipleMyObjectElements,"\nTMyClass objects added are : ");
-00261         // Add multiple TMyClasss to the circular buffer
-00262         result= circularBuffer->Add(&myObjectsToAdd[1], 3); // Add three objects to circular buffer.
-00263         User::LeaveIfError(result);
-00264         ASSERT(result == 3); //Making sure 3 objects are added.
-00265         iConsole->Printf(KAddedMultipleMyObjectElements);
-00266         iConsole->Printf(KPrintMsgFormat,&(myObjectsToAdd[1].GetBuf()));
-00267         iConsole->Printf(KPrintMsgFormat,&(myObjectsToAdd[2].GetBuf()));
-00268         iConsole->Printf(KPrintMsgFormat,&(myObjectsToAdd[3].GetBuf()));
-00269         iConsole->Printf(KNumberOfObjects, circularBuffer->Count());
-00270         
-00271         _LIT(KAddMyObjectsToCircularBuffer,"\nAdding objects of TMyClasss to circular buffer is successful");
-00272         iConsole->Printf(KAddMyObjectsToCircularBuffer);
-00273         iConsole->Printf(KPressAKey);
-00274         iConsole->Getch();
-00275         
-00276         
-00277         //Array to hold removed elements from circular buffer.
-00278         TMyClass myRemovedObjects[6];
-00279         _LIT(KRemovedMultipleMyObjectElements,"\nTMyClass objects removed are: ");
-00280         
-00281         // Remove multiple TMyClasss from the circular buffer.
-00282         result= circularBuffer->Remove(&myRemovedObjects[0],2);
-00283         ASSERT(result == 2);
-00284         iConsole->Printf(KRemovedMultipleMyObjectElements);
-00285         iConsole->Printf(KPrintMsgFormat,&(myRemovedObjects[0].GetBuf()));
-00286         iConsole->Printf(KPrintMsgFormat,&(myRemovedObjects[1].GetBuf()));
-00287         iConsole->Printf(KNumberOfObjects, circularBuffer->Count());    
-00288 
-00289         // Add two elements to circular buffer
-00290         result= circularBuffer->Add(&myObjectsToAdd[4],2);
-00291         User::LeaveIfError(result);
-00292         ASSERT(result == 2);
-00293         iConsole->Printf(KAddedMultipleMyObjectElements);
-00294         iConsole->Printf(KPrintMsgFormat,&(myObjectsToAdd[4].GetBuf()));
-00295         iConsole->Printf(KPrintMsgFormat,&(myObjectsToAdd[5].GetBuf()));
-00296         iConsole->Printf(KNumberOfObjects, circularBuffer->Count());
-00297         
-00298         // Remove multiple TMyClasss from the circular buffer.
-00299         result= circularBuffer->Remove(&myRemovedObjects[2],4);
-00300         ASSERT(result == 4);
-00301         iConsole->Printf(KRemovedMultipleMyObjectElements);
-00302         iConsole->Printf(KPrintMsgFormat,&(myRemovedObjects[2].GetBuf()));
-00303         iConsole->Printf(KPrintMsgFormat,&(myRemovedObjects[3].GetBuf()));
-00304         iConsole->Printf(KPrintMsgFormat,&(myRemovedObjects[4].GetBuf()));
-00305         iConsole->Printf(KPrintMsgFormat,&(myRemovedObjects[5].GetBuf()));
-00306         iConsole->Printf(KNumberOfObjects, circularBuffer->Count());    
-00307         
-00308         for(TInt index=0;index<6;index++)
-00309                 {
-00310                 // The removed objects are same as added ones and are in order.
-00311                 ASSERT(myRemovedObjects[index].GetBuf() == myObjectsToAdd[index].GetBuf());
-00312                 }
-00313         
-00314         _LIT(KRemoveMyObjectsFromCircularBuffer,"\nRemoving TMyClass objects from circular buffer is successful");
-00315         iConsole->Printf(KRemoveMyObjectsFromCircularBuffer);
-00316         iConsole->Printf(KPressAKey);
-00317         iConsole->Getch();
-00318         
-00319         //Pop the circular buffer off the cleanup stack and destroy it.
-00320         CleanupStack::PopAndDestroy(circularBuffer);
-00321         }
-00322 
-00326 void CCircularBufferExample::CircularBufferOfRClasssL()
-00327         {
-00328         _LIT(KCircularBufferForRBuf,"\n *****Circular buffer of R Class*****");
-00329         iConsole->Printf(KCircularBufferForRBuf);
-00330         // Creates a circular buffer containing RBuf.
-00331         CCirBuf<RBuf>* circularBuffer=new(ELeave)CCirBuf<RBuf>;
-00332         // Push the circular buffer onto the cleanup stack.
-00333         CleanupStack::PushL(circularBuffer);
-00334         
-00335         const TInt KMaxElements = 2;
-00336         // Sets the maximum capacity of this circular buffer.
-00337         circularBuffer->SetLengthL(KMaxElements);// max capacity is KMaxElements
-00338         iConsole->Printf(KConstruct);
-00339         _LIT(KConstructCircularBufferForRBuf, "\n Construction of circular buffer of R Class is successful");
-00340         iConsole->Printf(KConstructCircularBufferForRBuf);              
-00341 
-00342         RBuf bufToAdd1;
-00343         _LIT(KBuffer1,"11111");
-00344         // Create an buffer descriptor and assign KBuffer1 data to the descriptor.
-00345         bufToAdd1.CreateL(KBuffer1);
-00346 
-00347         iConsole->Printf(KNumberOfObjects, circularBuffer->Count());
-00348         
-00349         _LIT(KAddedElements,"Added Element: ");
-00350         iConsole->Printf(KAdd);
-00351         TInt result=circularBuffer->Add(&bufToAdd1); // Add a Rbuf object to the circular buffer.
-00352         User::LeaveIfError(result);
-00353         ASSERT(result == 1);
-00354         iConsole->Printf(KAddedElements);
-00355         iConsole->Printf(bufToAdd1);
-00356         iConsole->Printf(KNumberOfObjects, circularBuffer->Count());            
-00357         
-00358         _LIT(KBuffer2,"22222");
-00359         RBuf bufToAdd2;
-00360         // Create an buffer descriptor and assign KBuffer2 data to the descriptor.
-00361         bufToAdd2.CreateL(KBuffer2);
-00362         
-00363         result=circularBuffer->Add(&bufToAdd2); // Add a Rbuf object to the circular buffer.
-00364         User::LeaveIfError(result);
-00365         ASSERT(result == 1);
-00366         iConsole->Printf(KAddedElements);
-00367         iConsole->Printf(bufToAdd2);
-00368         iConsole->Printf(KNumberOfObjects, circularBuffer->Count());            
-00369         
-00370         _LIT(KAddRBufferToCircularBuffer,"\nAdding to circular buffer of R Class is successful\n");
-00371         iConsole->Printf(KAddRBufferToCircularBuffer);
-00372         
-00373         RBuf bufToRemove;
-00374         iConsole->Printf(KRemove);
-00375         _LIT(KElementRemoved,"Removed Element: ");
-00376         
-00377         result=circularBuffer->Remove(&bufToRemove); //bufToRemove will point to bufToAdd1 location.
-00378         ASSERT(result == 1);
-00379         iConsole->Printf(KElementRemoved);
-00380         iConsole->Printf(bufToRemove);
-00381         iConsole->Printf(KNumberOfObjects, circularBuffer->Count());            
-00382 
-00383         
-00384         bufToAdd2.Close(); 
-00385         bufToRemove.Close(); 
-00386         CleanupStack::PopAndDestroy(circularBuffer);
-00387         _LIT(KPressAnyKeyToExit,"\nPress any key to exit ");
-00388         iConsole->Printf(KPressAnyKeyToExit);
-00389         iConsole->Getch();
-00390         }
-00391 
-00392 
-00393 void MainL()
-00394         {
-00395         CCircularBufferExample* app= CCircularBufferExample::NewL();
-00396         CleanupStack::PushL(app);
-00397         
-00398         // Circular buffer containing integers.
-00399         app->CircularBufferOfIntsL();
-00400 
-00401         // Circular buffer containing TMyClasss.
-00402         app->CircularBufferOfMyObjectsL();
-00403         
-00404         // Circular buffer containing RBuf 
-00405         app->CircularBufferOfRClasssL();
-00406         CleanupStack::PopAndDestroy(app);
-00407         } 
-00408 
-00409 GLDEF_C TInt E32Main()
-00410         {
-00411         __UHEAP_MARK;
-00412 
-00413         CTrapCleanup* cleanup = CTrapCleanup::New();
-00414         if(cleanup == NULL)
-00415                 {
-00416                 return KErrNoMemory;
-00417                 }
-00418         TRAPD(err, MainL());
-00419         if(err !=KErrNone)
-00420                 {
-00421                 _LIT(KFailed, "\nFailed to complete");
-00422                 User::Panic(KFailed, err);
-00423                 }       
-00424         delete cleanup;
-00425 
-00426         __UHEAP_MARKEND;
-00427         return KErrNone;
-00428         }
-

Generated on Thu Jan 21 10:32:55 2010 for TB10.1 Example Applications by  - -doxygen 1.5.3
- -