SlideShare una empresa de Scribd logo
1 de 45
Symbian OS (Dynamic) Arrays v2.0a – 28 January 2008 1 Andreas Jakl, 2008
Disclaimer These slides are provided free of charge at http://www.symbianresources.com and are used during Symbian OS courses at the University of Applied Sciences in Hagenberg, Austria ( http://www.fh-hagenberg.at/ ) Respecting the copyright laws, you are allowed to use them: for your own, personal, non-commercial use in the academic environment In all other cases (e.g. for commercial training), please contact andreas.jakl@fh-hagenberg.at The correctness of the contents of these materials cannot be guaranteed. Andreas Jakl is not liable for incorrect information or damage that may arise from using the materials. Parts of these materials are based on information from Symbian Press-books published by John Wiley & Sons, Ltd. This document contains copyright materials which are proprietary to Symbian, UIQ, Nokia and SonyEricsson. “S60™” is a trademark of Nokia. “UIQ™” is a trademark of UIQ Technology. Pictures of mobile phones or applications are copyright their respective manufacturers / developers. “Symbian ™”, “Symbian OS ™” and all other Symbian-based marks and logos are trademarks of Symbian Software Limited and are used under license. © Symbian Software Limited 2006.  Andreas Jakl, 2008 2
Contents Fixed Arrays Dynamic Arrays RArray, RPointerArray CArrayX Whentouse R(Pointer)Array orCArrayX Andreas Jakl, 2008 3
Fixed Arrays Starting simple Andreas Jakl, 2008 4
Fixed Arrays Standard C++ Array: TIntmyArray[25]; The same using Symbian OS wrapper class: TFixedArray<TInt, 25> myArray; Andreas Jakl, 2008 5 [0] [1] … [24] <ptr> myArray 25x TInt
TFixedArray - Advantages Range checking (Panic if out of range) At(): Checks range in debug- and release-builds []: Checks range in debug-builds only Comfort functions, e.g.: DeleteAll(): invokes delete on each element Reset(): fills each element with zeros Count(): number of elements in the array Begin(), End(): to navigate the array Andreas Jakl, 2008 6
Dynamic Arrays Overview Andreas Jakl, 2008 7
Dynamic Arrays – Overview Available dynamic array types: Flat / Segmented arrays Pointer / direct arrays Descriptor Arrays (Doubly) Linked Lists Circular Arrays Balanced Trees STL collections not supported (footprint too large for mobile devices) Andreas Jakl, 2008 8 RArrayX / CArrayX CDesCArrayX / CPtrCArray TSglQue / TDblQue CCirBuf TBTree / TBTreeFix
RArray / RPointerArray Usually the best way to store your data: Andreas Jakl, 2008 9
RArray RArray<MyObj> myArray Dynamic Array for fixed-length objects(T- and R-type (no C-type!), max. size: 640 bytes) Features: insertion, sorting, finding elements, … Free memory with: myArray.Close();		// Free memory and close array ormyArray.Reset();	// Free memory, prepare for reuse Specify granularity:RArray<TAccount> accounts(4); Andreas Jakl, 2008 10
Granularity Andreas Jakl, 2008 11 Heap memory occupiedby a valid element Unoccupied element Granularity = 4 RArray<TAccount> accounts(4); 3 elements added, Capacity = 4 0 1 2 3 add 1 element 4 elements added, Capacity = 4 0 1 2 3 Memory reallocation add 1 element 5 elements added, Capacity = 8 0 1 2 3 4 5 6 7 Granularity border Granularity border
Granularity – Usage Pattern Choose granularity according to expected contents Too small: overhead through many reallocations Too large: wastes storage space Examples: Array typically holds 8 to 10 objects Granularity 10 good, 100 wastes space Usually 11 objects Granularity 10 wastes memory for 9 objects Granularity 1 Too many reallocations Andreas Jakl, 2008 12
Example: Adding Data Andreas Jakl, 2008 13 class TAccount { public: TAccount(TIntaNumber, TIntaAmount)	{ iAccountNumber = aNumber;iAmount = aAmount; } public: TIntiAccountNumber; TIntiAmount; }; ... // Create an array which can store TAccount-objs. RArray<TAccount> accounts(4); // Make sure cleanup of the array’s heap memory// is done in case of a leave! CleanupClosePushL(accounts); // Create some test-accounts TAccount a1(16, 58354); TAccount a2(14, 8731); // Add  accounts.AppendL(a1); accounts.AppendL(a2); // Do some stuff with the array // ... // Finally, do cleanup CleanupStack::PopAndDestroy(1); ... 2 TInt-variables(iAccountNumber, iAccount) = 2x4 bytes= 8 byte entry size
Inserting Insert: TInt success = accounts.Insert(const T& aEntry, TIntaPos); aPos: Insert at this position, shuffle everything up.e.g. position 0 = insert at beginning, move everything back Return value: KErrNone (Success) or system wide error code Andreas Jakl, 2008 14
Defining an Order Simple version: Define order based on integer key Key = Data member of array element Used for searching, inserting and sorting Define which variable to use in RArray-constructor:RArray(TIntaGranularity, TIntaKeyOffset) Andreas Jakl, 2008 15 
Key Offset Example: Create Array using: Andreas Jakl, 2008 16 class TAccount { public: TAccount(TIntaNumber, TIntaAmount); public: TIntiAccountNumber;TIntiAmount; }; The HOFF!* RArray<TAccount> accounts(4, _FOFF(TAccount, iAccountNumber)); ... well, in reality it’s the Field OFFset macro. * Image copyright:www.davidhasselhoff.com
Sorting Sort objects within the array (ascending) Based on key-variable: SortSigned(): for TInt member variable SortUnsigned(): for TUint member variable Andreas Jakl, 2008 17
Ordered Inserting Based on key-variable: InsertInSignedKeyOrder(): for TInt member variable InsertInUnsignedKeyOrder(): for TUint member variable Inserts in ascending order based on key If key already exists: Return code: KErrAlreadyExists Or use the […]AllowRepeats()-version of Insert(e.g. InsertInSignedKeyOrderAllowRepeats()) Andreas Jakl, 2008 18
Example Demonstrates sorting and ordered inserting: Andreas Jakl, 2008 19 RArray<TAccount> accounts(4, _FOFF(TAccount, iAccountNumber)); CleanupClosePushL(accounts); accounts.AppendL(TAccount(16, 58354)); accounts.AppendL(TAccount(14, 8731)); // Initial array accounts.SortSigned(); // Array is now sorted accounts.InsertInSignedKeyOrderL(TAccount(15, 16923)); // After ordered insert CleanupStack::PopAndDestroy(1);
Finding Linear search Find(const &T aObject) Binary search FindInSignedKeyOrder(const &T aObject) FindInUnsignedKeyOrder(const &T aObject) ... assumes that the list is currently ordered by key value Andreas Jakl, 2008 20 TIntidx = accounts.FindInSignedKeyOrder(TAccount(16, 0)); // idx == 2 Comparison is done based on account number. Here: Search for account# 16
Advanced Comparison More control over the order Andreas Jakl, 2008 21
Define your own order For more control over comparison process, e.g.: Sort based on more than one variable Sort based on non-Integer key  Own call-back function to compare two elements Returns: Negative value: 1st < 2nd 0: 1st == 2nd Positive value: 1st > 2nd Andreas Jakl, 2008 22
TLinearOrder<> Create a TLinearOrder-object based on the element-class Function pointer specifies which comparison function to use Can be used for sorting, ordered insertion and ordered finding Andreas Jakl, 2008 23 Function pointer to the comparison function (see full example on the following slides) TLinearOrder-object is based on this class TLinearOrder<TAccount> order(TAccount::CompareName); // Now sort the array using your custom comparison function accounts.Sort(order); accounts.InsertInOrderL(newEntry, order);
Complete Example Andreas Jakl, 2008 24 Extended TAccount-class class TAccount { public: TAccount(const TDesC& aOwnerName, TIntaNumber, TIntaAmount); static TIntCompareName(const TAccount& aElement1, const TAccount& aElement2); public: TIntiAccountNumber; TIntiAmount; TBuf<40> iOwnerName; }; // Constructor TAccount::TAccount(const TDesC& aOwnerName, TIntaNumber, TIntaAmount) : iAccountNumber(aNumber), iAmount(aAmount) { iOwnerName.Copy(aOwnerName); } // Comparison function TIntTAccount::CompareName(const TAccount& aElement1, const TAccount& aElement2) { // Use built-in comparison function of descriptor base class!     return aElement1.iOwnerName.CompareF(aElement2.iOwnerName); }
Complete Example (cont’d) Andreas Jakl, 2008 25 [...] // Fill array with data _LIT(KName1, "Mopius"); _LIT(KName2, "Anna"); _LIT(KName3, "Tony"); accounts.AppendL(TAccount(KName1, 16, 58354)); accounts.AppendL(TAccount(KName2, 14, 8731)); accounts.AppendL(TAccount(KName3, 15, 16923)); // Array is now sorted by order of insertion // Create a TLinearOrder-object with a // function pointer to our comparison function TLinearOrder<TAccount> order(TAccount::CompareName); // Sort the array using the comparison function accounts.Sort(order); // Array is now sorted alphabetically by the owner name
Compare as you like Similar to defining own order Define an own matching function. Returns: ETrue: Objects are identical EFalse: Objects are non-identical Find an element using: Andreas Jakl, 2008 26 ... at least accordingto your own rules! Function pointer to the matching function TIdentityRelation-object is based on this class TIdentityRelation<TAccount> matcher(TAccount::MatchApproxAmount); TIntidx = accounts.Find(TAccount(KNullDesC, 0, 58330), matcher); Find a matching element using your own matching function The value to search for
Example Andreas Jakl, 2008 27 // Match the amount of both elements approximately (difference of ± 100 is allowed!) TBoolTAccount::MatchApproxAmount(const TAccount& aElement1, const TAccount& aElement2) {     if ((aElement1.iAmount >= aElement2.iAmount - 100) &&          (aElement1.iAmount <= aElement2.iAmount + 100)) {                return ETrue;			// Elements are identical based on our approximate rule     }     return EFalse;				// Elements are not identical } // Create a matcher object that uses our approximate matching function TIdentityRelation<TAccount> matcher(TAccount::MatchApproxAmount); const TIntfindAmount = 58330;		// Account to find should have approximately this amount of money TIntidx = accounts.Find(TAccount(KNullDesC, 0, findAmount), matcher); _LIT(KFindThis, "Search account with approx. amount: %d"); console->Printf(KFindThis, findAmount); if (idx == KErrNotFound) {     console->Printf(_L("No account was found")); } else {     _LIT(KFindSuccess, "Found account owned by: %S");     console->Printf(KFindSuccess, &accounts[idx].iOwnerName); } Use KNullDesC instead of 0 if you don’t want to specify a descriptor.
RPointerArray Similar to RArray, stores pointers to objects instead of directly storing copies of them Can be used for any type objects (also C-type!) (Nearly) the same functionality as RArray But does not support a key index due to complex structure of C-type objects. AlwaysuseTLinearOrder instead! (sorting, inserting, ...) Free memory with: Close() or Reset()		// If array goes out of scope ResetAndDestroy()		// If objects are owned by the array Andreas Jakl, 2008 28
CArrays More flexible, but they have their disadvantages: Andreas Jakl, 2008 29
Storing data Objects can be stored in different ways: Andreas Jakl, 2008 30 Array type: CArrayXX Fix VarorPtr Pak 7 5 12 element length
Memory Layout Various memory layouts are supported: Andreas Jakl, 2008 31 Array type: CArrayXX Flat buffer Granularity = 4 Segmented Buffer (Doubly linked list)
Flat / Segmented Buffers Flat Buffer: Stores entire data within a single heap cell When it’s full:  During next append, data has to be transferred to a new allocated heap cell Use when: High speed pointer lookup is required Array resizing is expected to be infrequent Andreas Jakl, 2008 32 Flat buffer
Flat / Segmented Buffers Segmented Buffer: Stores data in doubly-linked list of smaller segments Each segment = separate heap cell with fixed size When it’s full: New segment is allocated, old data remains in place Use for/when: Large arrays which resize frequently Elements frequently inserted into or deleted from the array Andreas Jakl, 2008 33 Segmented Buffer
Overview Several combinations are possible: Andreas Jakl, 2008 34 * Cleanup: 1....	Elements are owned and destroyed by the array (Reset(), Close()) 2....	Elements must be destroyed separately (ResetAndDestroy())
CArrayX vs. RArray In short: UseRArray except when you need segmented memory! Next two slides: Detailed information, important for ASD-Exam Andreas Jakl, 2008 35
CArrayXvs. RArray? CArray Disadvantages: Older API, sorting etc. is more difficult Constructs TPtr8-object for every array access  performance overhead! Two (!) assertion checks for each array access All manipulation-functions (AppendL(), InsertL(), ...) are only available with leave – can have disadvantages, requires TRAP for every access in functions that should not leave! Advantage: Segmented-memory versions available (CArrayFixSeg, CArrayPtrSeg) Andreas Jakl, 2008 36
CArrayX vs. RArray? RArray Disadvantages: Element-size max. 640 bytes No segmented memory version available May have problems with non-word-aligned element size on hardware that enforces strict alignment Advantages: Better performance than counterparts (RArray CArrayFixFlat, RPointerArray  CArrayPtrFlat) R-Classes lower overhead than C-classes (No zero-fill on allocation, no virtual function table pointer) Andreas Jakl, 2008 37
Test your Knowledge Did you understand everything? Andreas Jakl, 2008 38
ASD-like Question – Easy  Which of the following statements correctly describe the 'granularity' of Symbian OS dynamic arrays? A. Granularity represents the current number of elements in the array. B. Granularity represents the maximum size of the array. C. Granularity represents the amount by which the capacity of the array increases during a reallocation. D. Granularity represents the maximum number of elements the array can hold without reallocation when the array is first created. E. Granularity applies to arrays contained in either flat or segmented memory buffers. Andreas Jakl, 2008 39 Copyright Meme Education, 2006 http://www.meme-education.com/
Solution A.	Incorrect. Number of elements is equal to or less than the granularity, as arrays are not resized for every added / removed element (except when the granularity would be 1) B.	Incorrect. Dynamic arrays are automatically reallocated, the granularity defines when this happens. C.	Correct. D.	Correct.  E.	Correct.  Andreas Jakl, 2008 40
ASD-like Question – Medium Which of the following statements about Symbian OS dynamic arrays are incorrect? A. When searching for an element in the array the search is always started at the low index and the search will always return with the first matching element. B. Symbian OS dynamic arrays must always be constructed on the heap. C. The maximum size of an element stored in RArray is bounded to an upper limit of 640 bytes. D. Only flat and not pointer type dynamic arrays can be sorted. E. Only the CArrayX classes can be used in user-side code. RArray and RPointerArray are intended for kernel-side arrays only. Andreas Jakl, 2008 41 Copyright Meme Education, 2006 http://www.meme-education.com/
Solution A.	Correct.  B.	Incorrect. RArrays can be constructed on the stack, even though they store their data on the heap. C.	Correct. D.	Incorrect. All dynamic array types provide methods for sorting. E.	Incorrect. RArrays and RPointerArrays can be used on the Kernel-side as well. Only a few functions are not available to code running on the kernel side (see SDK-doc). Andreas Jakl, 2008 42
ASD-like Question Which of the following are valid reasons for using one of the CArrayX classes rather than RArray or RPointerArray? A. When using the CArrayX classes, two assertion checks occur for every array access. As a result, CArrayX element access is less error-prone. B. To access an element of RArray requires a TPtr8 to be constructed around it. This makes access slower than for CArrayX arrays. C. Unlike CArrayX flat arrays, RArray stores objects in the array as word (4 byte) aligned quantities and it is possible to get an unhandled exception on hardware that enforces strict alignment. D. Some CArrayX classes provide support for segmented memory storage. E. The size of elements in RArray is limited to a maximum of 640 bytes. This is not the case for elements of the CArrayX array classes. Andreas Jakl, 2008 43 Copyright Meme Education, 2006 http://www.meme-education.com/
Solution A.Not valid. All Symbian OS arrays include range-checks. Two of them are not twice as secure... B.	Not valid. It’s the other way round, CArrayX-arrays require a TPtr8-object. RArrays are more efficient. C.	Valid. D.	Valid.  E.	Valid.  Andreas Jakl, 2008 44
… let’s move to the Challenges! Try it for your own Andreas Jakl, 2008 45

Más contenido relacionado

La actualidad más candente

Introduction to matplotlib
Introduction to matplotlibIntroduction to matplotlib
Introduction to matplotlibPiyush rai
 
C++ Standard Template Library
C++ Standard Template LibraryC++ Standard Template Library
C++ Standard Template LibraryIlio Catallo
 
Java - Collections framework
Java - Collections frameworkJava - Collections framework
Java - Collections frameworkRiccardo Cardin
 
16 Linear data structures
16 Linear data structures16 Linear data structures
16 Linear data structuresmaznabili
 
Ds
DsDs
DsAcad
 
Java collections
Java collectionsJava collections
Java collectionsAmar Kutwal
 
Matplotlib Review 2021
Matplotlib Review 2021Matplotlib Review 2021
Matplotlib Review 2021Bhaskar J.Roy
 
LATERAL Derived Tables in MySQL 8.0
LATERAL Derived Tables in MySQL 8.0LATERAL Derived Tables in MySQL 8.0
LATERAL Derived Tables in MySQL 8.0Norvald Ryeng
 
Collections Java e Google Collections
Collections Java e Google CollectionsCollections Java e Google Collections
Collections Java e Google CollectionsAndré Faria Gomes
 
Queue Data Structure
Queue Data StructureQueue Data Structure
Queue Data StructureZidny Nafan
 
Chapter 3: basic sorting algorithms data structure
Chapter 3: basic sorting algorithms data structureChapter 3: basic sorting algorithms data structure
Chapter 3: basic sorting algorithms data structureMahmoud Alfarra
 
Advanced data structures slide 2 2+
Advanced data structures slide 2 2+Advanced data structures slide 2 2+
Advanced data structures slide 2 2+jomerson remorosa
 
13. dynamic allocation
13. dynamic allocation13. dynamic allocation
13. dynamic allocation웅식 전
 
Data Structures and Files
Data Structures and FilesData Structures and Files
Data Structures and FilesKanchanPatil34
 
Python Pandas
Python PandasPython Pandas
Python PandasSunil OS
 
Programming haskell chapter10
Programming haskell chapter10Programming haskell chapter10
Programming haskell chapter10Kousuke Ruichi
 
Chapter 5: linked list data structure
Chapter 5: linked list data structureChapter 5: linked list data structure
Chapter 5: linked list data structureMahmoud Alfarra
 
Object Oriented Programming - 5.1. Array
Object Oriented Programming - 5.1. ArrayObject Oriented Programming - 5.1. Array
Object Oriented Programming - 5.1. ArrayAndiNurkholis1
 

La actualidad más candente (20)

Introduction to matplotlib
Introduction to matplotlibIntroduction to matplotlib
Introduction to matplotlib
 
C++ Standard Template Library
C++ Standard Template LibraryC++ Standard Template Library
C++ Standard Template Library
 
Java - Collections framework
Java - Collections frameworkJava - Collections framework
Java - Collections framework
 
R Cheat Sheet
R Cheat SheetR Cheat Sheet
R Cheat Sheet
 
Java Collections Tutorials
Java Collections TutorialsJava Collections Tutorials
Java Collections Tutorials
 
16 Linear data structures
16 Linear data structures16 Linear data structures
16 Linear data structures
 
Ds
DsDs
Ds
 
Java collections
Java collectionsJava collections
Java collections
 
Matplotlib Review 2021
Matplotlib Review 2021Matplotlib Review 2021
Matplotlib Review 2021
 
LATERAL Derived Tables in MySQL 8.0
LATERAL Derived Tables in MySQL 8.0LATERAL Derived Tables in MySQL 8.0
LATERAL Derived Tables in MySQL 8.0
 
Collections Java e Google Collections
Collections Java e Google CollectionsCollections Java e Google Collections
Collections Java e Google Collections
 
Queue Data Structure
Queue Data StructureQueue Data Structure
Queue Data Structure
 
Chapter 3: basic sorting algorithms data structure
Chapter 3: basic sorting algorithms data structureChapter 3: basic sorting algorithms data structure
Chapter 3: basic sorting algorithms data structure
 
Advanced data structures slide 2 2+
Advanced data structures slide 2 2+Advanced data structures slide 2 2+
Advanced data structures slide 2 2+
 
13. dynamic allocation
13. dynamic allocation13. dynamic allocation
13. dynamic allocation
 
Data Structures and Files
Data Structures and FilesData Structures and Files
Data Structures and Files
 
Python Pandas
Python PandasPython Pandas
Python Pandas
 
Programming haskell chapter10
Programming haskell chapter10Programming haskell chapter10
Programming haskell chapter10
 
Chapter 5: linked list data structure
Chapter 5: linked list data structureChapter 5: linked list data structure
Chapter 5: linked list data structure
 
Object Oriented Programming - 5.1. Array
Object Oriented Programming - 5.1. ArrayObject Oriented Programming - 5.1. Array
Object Oriented Programming - 5.1. Array
 

Destacado

June 2007 main paper resources
June 2007 main paper resourcesJune 2007 main paper resources
June 2007 main paper resourcesMr Cornish
 
Swot strenghts weaknesses analysis style design 2 powerpoint ppt templates.
Swot strenghts weaknesses analysis style design 2 powerpoint ppt templates.Swot strenghts weaknesses analysis style design 2 powerpoint ppt templates.
Swot strenghts weaknesses analysis style design 2 powerpoint ppt templates.SlideTeam.net
 
KSU PLU Counselors2-09-10
KSU PLU Counselors2-09-10KSU PLU Counselors2-09-10
KSU PLU Counselors2-09-10TargetX
 
Voladores Para Cmlp Xviii
Voladores Para Cmlp XviiiVoladores Para Cmlp Xviii
Voladores Para Cmlp XviiiPedro Richter
 
Azbox bravoo HD + Manual en Español
Azbox bravoo HD +  Manual en EspañolAzbox bravoo HD +  Manual en Español
Azbox bravoo HD + Manual en Españolhaguirre
 
Aziende cosmetiche e Internet: indagine on-line sull'evoluzione
Aziende cosmetiche e Internet: indagine on-line sull'evoluzione Aziende cosmetiche e Internet: indagine on-line sull'evoluzione
Aziende cosmetiche e Internet: indagine on-line sull'evoluzione G&P communication srl
 
Green Day 21 Guns
Green Day 21 GunsGreen Day 21 Guns
Green Day 21 Gunsalbaqr
 
Fashion-Jumpsuit_after
Fashion-Jumpsuit_afterFashion-Jumpsuit_after
Fashion-Jumpsuit_afterJerome Bush
 
SwitchPitch - Der König ist Kunde
SwitchPitch - Der König ist KundeSwitchPitch - Der König ist Kunde
SwitchPitch - Der König ist KundeKundenbüroHH
 
Evolucion de los dipositivos de almacenamiento de informacion desde 1980 hast...
Evolucion de los dipositivos de almacenamiento de informacion desde 1980 hast...Evolucion de los dipositivos de almacenamiento de informacion desde 1980 hast...
Evolucion de los dipositivos de almacenamiento de informacion desde 1980 hast...keibet
 
Querido yo del futuro, delfina calero
Querido yo del futuro, delfina caleroQuerido yo del futuro, delfina calero
Querido yo del futuro, delfina caleroDelfina Calero
 
Axis Labs Creatine Ethyl Ester
Axis Labs Creatine Ethyl EsterAxis Labs Creatine Ethyl Ester
Axis Labs Creatine Ethyl EsterSimin Jones
 
ow effective is the combination of your main product and ancillary texts? TASK 2
ow effective is the combination of your main product and ancillary texts? TASK 2ow effective is the combination of your main product and ancillary texts? TASK 2
ow effective is the combination of your main product and ancillary texts? TASK 2ARCHIECLARKE
 
Curso buscadores AI
Curso buscadores AICurso buscadores AI
Curso buscadores AICarlos Felix
 

Destacado (17)

June 2007 main paper resources
June 2007 main paper resourcesJune 2007 main paper resources
June 2007 main paper resources
 
Swot strenghts weaknesses analysis style design 2 powerpoint ppt templates.
Swot strenghts weaknesses analysis style design 2 powerpoint ppt templates.Swot strenghts weaknesses analysis style design 2 powerpoint ppt templates.
Swot strenghts weaknesses analysis style design 2 powerpoint ppt templates.
 
KSU PLU Counselors2-09-10
KSU PLU Counselors2-09-10KSU PLU Counselors2-09-10
KSU PLU Counselors2-09-10
 
Voladores Para Cmlp Xviii
Voladores Para Cmlp XviiiVoladores Para Cmlp Xviii
Voladores Para Cmlp Xviii
 
Azbox bravoo HD + Manual en Español
Azbox bravoo HD +  Manual en EspañolAzbox bravoo HD +  Manual en Español
Azbox bravoo HD + Manual en Español
 
Kúttapo toixos
Kúttapo toixosKúttapo toixos
Kúttapo toixos
 
GTP Cover
GTP CoverGTP Cover
GTP Cover
 
Aziende cosmetiche e Internet: indagine on-line sull'evoluzione
Aziende cosmetiche e Internet: indagine on-line sull'evoluzione Aziende cosmetiche e Internet: indagine on-line sull'evoluzione
Aziende cosmetiche e Internet: indagine on-line sull'evoluzione
 
Green Day 21 Guns
Green Day 21 GunsGreen Day 21 Guns
Green Day 21 Guns
 
Fashion-Jumpsuit_after
Fashion-Jumpsuit_afterFashion-Jumpsuit_after
Fashion-Jumpsuit_after
 
SwitchPitch - Der König ist Kunde
SwitchPitch - Der König ist KundeSwitchPitch - Der König ist Kunde
SwitchPitch - Der König ist Kunde
 
Evolucion de los dipositivos de almacenamiento de informacion desde 1980 hast...
Evolucion de los dipositivos de almacenamiento de informacion desde 1980 hast...Evolucion de los dipositivos de almacenamiento de informacion desde 1980 hast...
Evolucion de los dipositivos de almacenamiento de informacion desde 1980 hast...
 
Querido yo del futuro, delfina calero
Querido yo del futuro, delfina caleroQuerido yo del futuro, delfina calero
Querido yo del futuro, delfina calero
 
Axis Labs Creatine Ethyl Ester
Axis Labs Creatine Ethyl EsterAxis Labs Creatine Ethyl Ester
Axis Labs Creatine Ethyl Ester
 
Domingo de pentecostes
Domingo de pentecostesDomingo de pentecostes
Domingo de pentecostes
 
ow effective is the combination of your main product and ancillary texts? TASK 2
ow effective is the combination of your main product and ancillary texts? TASK 2ow effective is the combination of your main product and ancillary texts? TASK 2
ow effective is the combination of your main product and ancillary texts? TASK 2
 
Curso buscadores AI
Curso buscadores AICurso buscadores AI
Curso buscadores AI
 

Similar a Symbian OS - Dynamic Arrays

Symbian OS - Types And Declarations
Symbian OS - Types And DeclarationsSymbian OS - Types And Declarations
Symbian OS - Types And DeclarationsAndreas Jakl
 
Java ME - 06 - Record Stores, Distribution and Localization
Java ME - 06 - Record Stores, Distribution and LocalizationJava ME - 06 - Record Stores, Distribution and Localization
Java ME - 06 - Record Stores, Distribution and LocalizationAndreas Jakl
 
Symbian OS - Memory Management
Symbian OS - Memory ManagementSymbian OS - Memory Management
Symbian OS - Memory ManagementAndreas Jakl
 
Symbian OS - Descriptors
Symbian OS - DescriptorsSymbian OS - Descriptors
Symbian OS - DescriptorsAndreas Jakl
 
ASP.NET 08 - Data Binding And Representation
ASP.NET 08 - Data Binding And RepresentationASP.NET 08 - Data Binding And Representation
ASP.NET 08 - Data Binding And RepresentationRandy Connolly
 
Abstract Data Types (a) Explain briefly what is meant by the ter.pdf
Abstract Data Types (a) Explain briefly what is meant by the ter.pdfAbstract Data Types (a) Explain briefly what is meant by the ter.pdf
Abstract Data Types (a) Explain briefly what is meant by the ter.pdfkarymadelaneyrenne19
 
MySQL 8.0: What Is New in Optimizer and Executor?
MySQL 8.0: What Is New in Optimizer and Executor?MySQL 8.0: What Is New in Optimizer and Executor?
MySQL 8.0: What Is New in Optimizer and Executor?Norvald Ryeng
 
(2) collections algorithms
(2) collections algorithms(2) collections algorithms
(2) collections algorithmsNico Ludwig
 
[嵌入式系統] MCS-51 實驗 - 使用 IAR (3)
[嵌入式系統] MCS-51 實驗 - 使用 IAR (3)[嵌入式系統] MCS-51 實驗 - 使用 IAR (3)
[嵌入式系統] MCS-51 實驗 - 使用 IAR (3)Simen Li
 
C*ollege Credit: CEP Distribtued Processing on Cassandra with Storm
C*ollege Credit: CEP Distribtued Processing on Cassandra with StormC*ollege Credit: CEP Distribtued Processing on Cassandra with Storm
C*ollege Credit: CEP Distribtued Processing on Cassandra with StormDataStax
 
Session9 J2ME Record Management System
Session9 J2ME Record Management SystemSession9 J2ME Record Management System
Session9 J2ME Record Management Systemmuthusvm
 
Concepts of Arrays
Concepts of ArraysConcepts of Arrays
Concepts of ArraysYashh Pandya
 
C++ Programming Class Creation Program Assignment Instructions
C++ Programming Class Creation Program Assignment InstructionsC++ Programming Class Creation Program Assignment Instructions
C++ Programming Class Creation Program Assignment InstructionsTawnaDelatorrejs
 
The Ring programming language version 1.9 book - Part 100 of 210
The Ring programming language version 1.9 book - Part 100 of 210The Ring programming language version 1.9 book - Part 100 of 210
The Ring programming language version 1.9 book - Part 100 of 210Mahmoud Samir Fayed
 
Java 5 6 Generics, Concurrency, Garbage Collection, Tuning
Java 5 6 Generics, Concurrency, Garbage Collection, TuningJava 5 6 Generics, Concurrency, Garbage Collection, Tuning
Java 5 6 Generics, Concurrency, Garbage Collection, TuningCarol McDonald
 

Similar a Symbian OS - Dynamic Arrays (20)

Symbian OS - Types And Declarations
Symbian OS - Types And DeclarationsSymbian OS - Types And Declarations
Symbian OS - Types And Declarations
 
Java ME - 06 - Record Stores, Distribution and Localization
Java ME - 06 - Record Stores, Distribution and LocalizationJava ME - 06 - Record Stores, Distribution and Localization
Java ME - 06 - Record Stores, Distribution and Localization
 
Symbian OS - Memory Management
Symbian OS - Memory ManagementSymbian OS - Memory Management
Symbian OS - Memory Management
 
Symbian OS - Descriptors
Symbian OS - DescriptorsSymbian OS - Descriptors
Symbian OS - Descriptors
 
ASP.NET 08 - Data Binding And Representation
ASP.NET 08 - Data Binding And RepresentationASP.NET 08 - Data Binding And Representation
ASP.NET 08 - Data Binding And Representation
 
Oops recap
Oops recapOops recap
Oops recap
 
Abstract Data Types (a) Explain briefly what is meant by the ter.pdf
Abstract Data Types (a) Explain briefly what is meant by the ter.pdfAbstract Data Types (a) Explain briefly what is meant by the ter.pdf
Abstract Data Types (a) Explain briefly what is meant by the ter.pdf
 
MySQL 8.0: What Is New in Optimizer and Executor?
MySQL 8.0: What Is New in Optimizer and Executor?MySQL 8.0: What Is New in Optimizer and Executor?
MySQL 8.0: What Is New in Optimizer and Executor?
 
(2) collections algorithms
(2) collections algorithms(2) collections algorithms
(2) collections algorithms
 
[嵌入式系統] MCS-51 實驗 - 使用 IAR (3)
[嵌入式系統] MCS-51 實驗 - 使用 IAR (3)[嵌入式系統] MCS-51 實驗 - 使用 IAR (3)
[嵌入式系統] MCS-51 實驗 - 使用 IAR (3)
 
Java Generics
Java GenericsJava Generics
Java Generics
 
C*ollege Credit: CEP Distribtued Processing on Cassandra with Storm
C*ollege Credit: CEP Distribtued Processing on Cassandra with StormC*ollege Credit: CEP Distribtued Processing on Cassandra with Storm
C*ollege Credit: CEP Distribtued Processing on Cassandra with Storm
 
Session9 J2ME Record Management System
Session9 J2ME Record Management SystemSession9 J2ME Record Management System
Session9 J2ME Record Management System
 
Concepts of Arrays
Concepts of ArraysConcepts of Arrays
Concepts of Arrays
 
C++ Programming Class Creation Program Assignment Instructions
C++ Programming Class Creation Program Assignment InstructionsC++ Programming Class Creation Program Assignment Instructions
C++ Programming Class Creation Program Assignment Instructions
 
2 a stacks
2 a stacks2 a stacks
2 a stacks
 
Eugene Burmako
Eugene BurmakoEugene Burmako
Eugene Burmako
 
Presentation_1370675757603
Presentation_1370675757603Presentation_1370675757603
Presentation_1370675757603
 
The Ring programming language version 1.9 book - Part 100 of 210
The Ring programming language version 1.9 book - Part 100 of 210The Ring programming language version 1.9 book - Part 100 of 210
The Ring programming language version 1.9 book - Part 100 of 210
 
Java 5 6 Generics, Concurrency, Garbage Collection, Tuning
Java 5 6 Generics, Concurrency, Garbage Collection, TuningJava 5 6 Generics, Concurrency, Garbage Collection, Tuning
Java 5 6 Generics, Concurrency, Garbage Collection, Tuning
 

Más de Andreas Jakl

Create Engaging Healthcare Experiences with Augmented Reality
Create Engaging Healthcare Experiences with Augmented RealityCreate Engaging Healthcare Experiences with Augmented Reality
Create Engaging Healthcare Experiences with Augmented RealityAndreas Jakl
 
AR / VR Interaction Development with Unity
AR / VR Interaction Development with UnityAR / VR Interaction Development with Unity
AR / VR Interaction Development with UnityAndreas Jakl
 
Android Development with Kotlin, Part 3 - Code and App Management
Android Development with Kotlin, Part 3 - Code and App ManagementAndroid Development with Kotlin, Part 3 - Code and App Management
Android Development with Kotlin, Part 3 - Code and App ManagementAndreas Jakl
 
Android Development with Kotlin, Part 2 - Internet Services and JSON
Android Development with Kotlin, Part 2 - Internet Services and JSONAndroid Development with Kotlin, Part 2 - Internet Services and JSON
Android Development with Kotlin, Part 2 - Internet Services and JSONAndreas Jakl
 
Android Development with Kotlin, Part 1 - Introduction
Android Development with Kotlin, Part 1 - IntroductionAndroid Development with Kotlin, Part 1 - Introduction
Android Development with Kotlin, Part 1 - IntroductionAndreas Jakl
 
Android and NFC / NDEF (with Kotlin)
Android and NFC / NDEF (with Kotlin)Android and NFC / NDEF (with Kotlin)
Android and NFC / NDEF (with Kotlin)Andreas Jakl
 
Basics of Web Technologies
Basics of Web TechnologiesBasics of Web Technologies
Basics of Web TechnologiesAndreas Jakl
 
Bluetooth Beacons - Bluetooth 5, iBeacon, Eddystone, Arduino, Windows 10 & More
Bluetooth Beacons - Bluetooth 5, iBeacon, Eddystone, Arduino, Windows 10 & MoreBluetooth Beacons - Bluetooth 5, iBeacon, Eddystone, Arduino, Windows 10 & More
Bluetooth Beacons - Bluetooth 5, iBeacon, Eddystone, Arduino, Windows 10 & MoreAndreas Jakl
 
Which new scenarios are enabled by Windows 10 for NFC, Bluetooth LE & Beacons?
Which new scenarios are enabled by Windows 10 for NFC, Bluetooth LE & Beacons?Which new scenarios are enabled by Windows 10 for NFC, Bluetooth LE & Beacons?
Which new scenarios are enabled by Windows 10 for NFC, Bluetooth LE & Beacons?Andreas Jakl
 
Mobile Test Automation
Mobile Test AutomationMobile Test Automation
Mobile Test AutomationAndreas Jakl
 
Qt App Development - Cross-Platform Development for Android, iOS, Windows Pho...
Qt App Development - Cross-Platform Development for Android, iOS, Windows Pho...Qt App Development - Cross-Platform Development for Android, iOS, Windows Pho...
Qt App Development - Cross-Platform Development for Android, iOS, Windows Pho...Andreas Jakl
 
WinJS, Apache Cordova & NFC - HTML5 apps for Android and Windows Phone
WinJS, Apache Cordova & NFC - HTML5 apps for Android and Windows PhoneWinJS, Apache Cordova & NFC - HTML5 apps for Android and Windows Phone
WinJS, Apache Cordova & NFC - HTML5 apps for Android and Windows PhoneAndreas Jakl
 
Nokia New Asha Platform Developer Training
Nokia New Asha Platform Developer TrainingNokia New Asha Platform Developer Training
Nokia New Asha Platform Developer TrainingAndreas Jakl
 
Windows Phone 8 NFC Quickstart
Windows Phone 8 NFC QuickstartWindows Phone 8 NFC Quickstart
Windows Phone 8 NFC QuickstartAndreas Jakl
 
Windows (Phone) 8 NFC App Scenarios
Windows (Phone) 8 NFC App ScenariosWindows (Phone) 8 NFC App Scenarios
Windows (Phone) 8 NFC App ScenariosAndreas Jakl
 
Windows 8 Platform NFC Development
Windows 8 Platform NFC DevelopmentWindows 8 Platform NFC Development
Windows 8 Platform NFC DevelopmentAndreas Jakl
 
NFC Development with Qt - v2.2.0 (5. November 2012)
NFC Development with Qt - v2.2.0 (5. November 2012)NFC Development with Qt - v2.2.0 (5. November 2012)
NFC Development with Qt - v2.2.0 (5. November 2012)Andreas Jakl
 
06 - Qt Communication
06 - Qt Communication06 - Qt Communication
06 - Qt CommunicationAndreas Jakl
 
05 - Qt External Interaction and Graphics
05 - Qt External Interaction and Graphics05 - Qt External Interaction and Graphics
05 - Qt External Interaction and GraphicsAndreas Jakl
 

Más de Andreas Jakl (20)

Create Engaging Healthcare Experiences with Augmented Reality
Create Engaging Healthcare Experiences with Augmented RealityCreate Engaging Healthcare Experiences with Augmented Reality
Create Engaging Healthcare Experiences with Augmented Reality
 
AR / VR Interaction Development with Unity
AR / VR Interaction Development with UnityAR / VR Interaction Development with Unity
AR / VR Interaction Development with Unity
 
Android Development with Kotlin, Part 3 - Code and App Management
Android Development with Kotlin, Part 3 - Code and App ManagementAndroid Development with Kotlin, Part 3 - Code and App Management
Android Development with Kotlin, Part 3 - Code and App Management
 
Android Development with Kotlin, Part 2 - Internet Services and JSON
Android Development with Kotlin, Part 2 - Internet Services and JSONAndroid Development with Kotlin, Part 2 - Internet Services and JSON
Android Development with Kotlin, Part 2 - Internet Services and JSON
 
Android Development with Kotlin, Part 1 - Introduction
Android Development with Kotlin, Part 1 - IntroductionAndroid Development with Kotlin, Part 1 - Introduction
Android Development with Kotlin, Part 1 - Introduction
 
Android and NFC / NDEF (with Kotlin)
Android and NFC / NDEF (with Kotlin)Android and NFC / NDEF (with Kotlin)
Android and NFC / NDEF (with Kotlin)
 
Basics of Web Technologies
Basics of Web TechnologiesBasics of Web Technologies
Basics of Web Technologies
 
Bluetooth Beacons - Bluetooth 5, iBeacon, Eddystone, Arduino, Windows 10 & More
Bluetooth Beacons - Bluetooth 5, iBeacon, Eddystone, Arduino, Windows 10 & MoreBluetooth Beacons - Bluetooth 5, iBeacon, Eddystone, Arduino, Windows 10 & More
Bluetooth Beacons - Bluetooth 5, iBeacon, Eddystone, Arduino, Windows 10 & More
 
Which new scenarios are enabled by Windows 10 for NFC, Bluetooth LE & Beacons?
Which new scenarios are enabled by Windows 10 for NFC, Bluetooth LE & Beacons?Which new scenarios are enabled by Windows 10 for NFC, Bluetooth LE & Beacons?
Which new scenarios are enabled by Windows 10 for NFC, Bluetooth LE & Beacons?
 
Mobile Test Automation
Mobile Test AutomationMobile Test Automation
Mobile Test Automation
 
Qt App Development - Cross-Platform Development for Android, iOS, Windows Pho...
Qt App Development - Cross-Platform Development for Android, iOS, Windows Pho...Qt App Development - Cross-Platform Development for Android, iOS, Windows Pho...
Qt App Development - Cross-Platform Development for Android, iOS, Windows Pho...
 
WinJS, Apache Cordova & NFC - HTML5 apps for Android and Windows Phone
WinJS, Apache Cordova & NFC - HTML5 apps for Android and Windows PhoneWinJS, Apache Cordova & NFC - HTML5 apps for Android and Windows Phone
WinJS, Apache Cordova & NFC - HTML5 apps for Android and Windows Phone
 
Nokia New Asha Platform Developer Training
Nokia New Asha Platform Developer TrainingNokia New Asha Platform Developer Training
Nokia New Asha Platform Developer Training
 
Windows Phone 8 NFC Quickstart
Windows Phone 8 NFC QuickstartWindows Phone 8 NFC Quickstart
Windows Phone 8 NFC Quickstart
 
Windows (Phone) 8 NFC App Scenarios
Windows (Phone) 8 NFC App ScenariosWindows (Phone) 8 NFC App Scenarios
Windows (Phone) 8 NFC App Scenarios
 
Windows 8 Platform NFC Development
Windows 8 Platform NFC DevelopmentWindows 8 Platform NFC Development
Windows 8 Platform NFC Development
 
NFC Development with Qt - v2.2.0 (5. November 2012)
NFC Development with Qt - v2.2.0 (5. November 2012)NFC Development with Qt - v2.2.0 (5. November 2012)
NFC Development with Qt - v2.2.0 (5. November 2012)
 
06 - Qt Communication
06 - Qt Communication06 - Qt Communication
06 - Qt Communication
 
05 - Qt External Interaction and Graphics
05 - Qt External Interaction and Graphics05 - Qt External Interaction and Graphics
05 - Qt External Interaction and Graphics
 
04 - Qt Data
04 - Qt Data04 - Qt Data
04 - Qt Data
 

Último

What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 

Último (20)

What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 

Symbian OS - Dynamic Arrays

  • 1. Symbian OS (Dynamic) Arrays v2.0a – 28 January 2008 1 Andreas Jakl, 2008
  • 2. Disclaimer These slides are provided free of charge at http://www.symbianresources.com and are used during Symbian OS courses at the University of Applied Sciences in Hagenberg, Austria ( http://www.fh-hagenberg.at/ ) Respecting the copyright laws, you are allowed to use them: for your own, personal, non-commercial use in the academic environment In all other cases (e.g. for commercial training), please contact andreas.jakl@fh-hagenberg.at The correctness of the contents of these materials cannot be guaranteed. Andreas Jakl is not liable for incorrect information or damage that may arise from using the materials. Parts of these materials are based on information from Symbian Press-books published by John Wiley & Sons, Ltd. This document contains copyright materials which are proprietary to Symbian, UIQ, Nokia and SonyEricsson. “S60™” is a trademark of Nokia. “UIQ™” is a trademark of UIQ Technology. Pictures of mobile phones or applications are copyright their respective manufacturers / developers. “Symbian ™”, “Symbian OS ™” and all other Symbian-based marks and logos are trademarks of Symbian Software Limited and are used under license. © Symbian Software Limited 2006. Andreas Jakl, 2008 2
  • 3. Contents Fixed Arrays Dynamic Arrays RArray, RPointerArray CArrayX Whentouse R(Pointer)Array orCArrayX Andreas Jakl, 2008 3
  • 4. Fixed Arrays Starting simple Andreas Jakl, 2008 4
  • 5. Fixed Arrays Standard C++ Array: TIntmyArray[25]; The same using Symbian OS wrapper class: TFixedArray<TInt, 25> myArray; Andreas Jakl, 2008 5 [0] [1] … [24] <ptr> myArray 25x TInt
  • 6. TFixedArray - Advantages Range checking (Panic if out of range) At(): Checks range in debug- and release-builds []: Checks range in debug-builds only Comfort functions, e.g.: DeleteAll(): invokes delete on each element Reset(): fills each element with zeros Count(): number of elements in the array Begin(), End(): to navigate the array Andreas Jakl, 2008 6
  • 7. Dynamic Arrays Overview Andreas Jakl, 2008 7
  • 8. Dynamic Arrays – Overview Available dynamic array types: Flat / Segmented arrays Pointer / direct arrays Descriptor Arrays (Doubly) Linked Lists Circular Arrays Balanced Trees STL collections not supported (footprint too large for mobile devices) Andreas Jakl, 2008 8 RArrayX / CArrayX CDesCArrayX / CPtrCArray TSglQue / TDblQue CCirBuf TBTree / TBTreeFix
  • 9. RArray / RPointerArray Usually the best way to store your data: Andreas Jakl, 2008 9
  • 10. RArray RArray<MyObj> myArray Dynamic Array for fixed-length objects(T- and R-type (no C-type!), max. size: 640 bytes) Features: insertion, sorting, finding elements, … Free memory with: myArray.Close(); // Free memory and close array ormyArray.Reset(); // Free memory, prepare for reuse Specify granularity:RArray<TAccount> accounts(4); Andreas Jakl, 2008 10
  • 11. Granularity Andreas Jakl, 2008 11 Heap memory occupiedby a valid element Unoccupied element Granularity = 4 RArray<TAccount> accounts(4); 3 elements added, Capacity = 4 0 1 2 3 add 1 element 4 elements added, Capacity = 4 0 1 2 3 Memory reallocation add 1 element 5 elements added, Capacity = 8 0 1 2 3 4 5 6 7 Granularity border Granularity border
  • 12. Granularity – Usage Pattern Choose granularity according to expected contents Too small: overhead through many reallocations Too large: wastes storage space Examples: Array typically holds 8 to 10 objects Granularity 10 good, 100 wastes space Usually 11 objects Granularity 10 wastes memory for 9 objects Granularity 1 Too many reallocations Andreas Jakl, 2008 12
  • 13. Example: Adding Data Andreas Jakl, 2008 13 class TAccount { public: TAccount(TIntaNumber, TIntaAmount) { iAccountNumber = aNumber;iAmount = aAmount; } public: TIntiAccountNumber; TIntiAmount; }; ... // Create an array which can store TAccount-objs. RArray<TAccount> accounts(4); // Make sure cleanup of the array’s heap memory// is done in case of a leave! CleanupClosePushL(accounts); // Create some test-accounts TAccount a1(16, 58354); TAccount a2(14, 8731); // Add accounts.AppendL(a1); accounts.AppendL(a2); // Do some stuff with the array // ... // Finally, do cleanup CleanupStack::PopAndDestroy(1); ... 2 TInt-variables(iAccountNumber, iAccount) = 2x4 bytes= 8 byte entry size
  • 14. Inserting Insert: TInt success = accounts.Insert(const T& aEntry, TIntaPos); aPos: Insert at this position, shuffle everything up.e.g. position 0 = insert at beginning, move everything back Return value: KErrNone (Success) or system wide error code Andreas Jakl, 2008 14
  • 15. Defining an Order Simple version: Define order based on integer key Key = Data member of array element Used for searching, inserting and sorting Define which variable to use in RArray-constructor:RArray(TIntaGranularity, TIntaKeyOffset) Andreas Jakl, 2008 15 
  • 16. Key Offset Example: Create Array using: Andreas Jakl, 2008 16 class TAccount { public: TAccount(TIntaNumber, TIntaAmount); public: TIntiAccountNumber;TIntiAmount; }; The HOFF!* RArray<TAccount> accounts(4, _FOFF(TAccount, iAccountNumber)); ... well, in reality it’s the Field OFFset macro. * Image copyright:www.davidhasselhoff.com
  • 17. Sorting Sort objects within the array (ascending) Based on key-variable: SortSigned(): for TInt member variable SortUnsigned(): for TUint member variable Andreas Jakl, 2008 17
  • 18. Ordered Inserting Based on key-variable: InsertInSignedKeyOrder(): for TInt member variable InsertInUnsignedKeyOrder(): for TUint member variable Inserts in ascending order based on key If key already exists: Return code: KErrAlreadyExists Or use the […]AllowRepeats()-version of Insert(e.g. InsertInSignedKeyOrderAllowRepeats()) Andreas Jakl, 2008 18
  • 19. Example Demonstrates sorting and ordered inserting: Andreas Jakl, 2008 19 RArray<TAccount> accounts(4, _FOFF(TAccount, iAccountNumber)); CleanupClosePushL(accounts); accounts.AppendL(TAccount(16, 58354)); accounts.AppendL(TAccount(14, 8731)); // Initial array accounts.SortSigned(); // Array is now sorted accounts.InsertInSignedKeyOrderL(TAccount(15, 16923)); // After ordered insert CleanupStack::PopAndDestroy(1);
  • 20. Finding Linear search Find(const &T aObject) Binary search FindInSignedKeyOrder(const &T aObject) FindInUnsignedKeyOrder(const &T aObject) ... assumes that the list is currently ordered by key value Andreas Jakl, 2008 20 TIntidx = accounts.FindInSignedKeyOrder(TAccount(16, 0)); // idx == 2 Comparison is done based on account number. Here: Search for account# 16
  • 21. Advanced Comparison More control over the order Andreas Jakl, 2008 21
  • 22. Define your own order For more control over comparison process, e.g.: Sort based on more than one variable Sort based on non-Integer key  Own call-back function to compare two elements Returns: Negative value: 1st < 2nd 0: 1st == 2nd Positive value: 1st > 2nd Andreas Jakl, 2008 22
  • 23. TLinearOrder<> Create a TLinearOrder-object based on the element-class Function pointer specifies which comparison function to use Can be used for sorting, ordered insertion and ordered finding Andreas Jakl, 2008 23 Function pointer to the comparison function (see full example on the following slides) TLinearOrder-object is based on this class TLinearOrder<TAccount> order(TAccount::CompareName); // Now sort the array using your custom comparison function accounts.Sort(order); accounts.InsertInOrderL(newEntry, order);
  • 24. Complete Example Andreas Jakl, 2008 24 Extended TAccount-class class TAccount { public: TAccount(const TDesC& aOwnerName, TIntaNumber, TIntaAmount); static TIntCompareName(const TAccount& aElement1, const TAccount& aElement2); public: TIntiAccountNumber; TIntiAmount; TBuf<40> iOwnerName; }; // Constructor TAccount::TAccount(const TDesC& aOwnerName, TIntaNumber, TIntaAmount) : iAccountNumber(aNumber), iAmount(aAmount) { iOwnerName.Copy(aOwnerName); } // Comparison function TIntTAccount::CompareName(const TAccount& aElement1, const TAccount& aElement2) { // Use built-in comparison function of descriptor base class! return aElement1.iOwnerName.CompareF(aElement2.iOwnerName); }
  • 25. Complete Example (cont’d) Andreas Jakl, 2008 25 [...] // Fill array with data _LIT(KName1, "Mopius"); _LIT(KName2, "Anna"); _LIT(KName3, "Tony"); accounts.AppendL(TAccount(KName1, 16, 58354)); accounts.AppendL(TAccount(KName2, 14, 8731)); accounts.AppendL(TAccount(KName3, 15, 16923)); // Array is now sorted by order of insertion // Create a TLinearOrder-object with a // function pointer to our comparison function TLinearOrder<TAccount> order(TAccount::CompareName); // Sort the array using the comparison function accounts.Sort(order); // Array is now sorted alphabetically by the owner name
  • 26. Compare as you like Similar to defining own order Define an own matching function. Returns: ETrue: Objects are identical EFalse: Objects are non-identical Find an element using: Andreas Jakl, 2008 26 ... at least accordingto your own rules! Function pointer to the matching function TIdentityRelation-object is based on this class TIdentityRelation<TAccount> matcher(TAccount::MatchApproxAmount); TIntidx = accounts.Find(TAccount(KNullDesC, 0, 58330), matcher); Find a matching element using your own matching function The value to search for
  • 27. Example Andreas Jakl, 2008 27 // Match the amount of both elements approximately (difference of ± 100 is allowed!) TBoolTAccount::MatchApproxAmount(const TAccount& aElement1, const TAccount& aElement2) { if ((aElement1.iAmount >= aElement2.iAmount - 100) && (aElement1.iAmount <= aElement2.iAmount + 100)) { return ETrue; // Elements are identical based on our approximate rule } return EFalse; // Elements are not identical } // Create a matcher object that uses our approximate matching function TIdentityRelation<TAccount> matcher(TAccount::MatchApproxAmount); const TIntfindAmount = 58330; // Account to find should have approximately this amount of money TIntidx = accounts.Find(TAccount(KNullDesC, 0, findAmount), matcher); _LIT(KFindThis, "Search account with approx. amount: %d"); console->Printf(KFindThis, findAmount); if (idx == KErrNotFound) { console->Printf(_L("No account was found")); } else { _LIT(KFindSuccess, "Found account owned by: %S"); console->Printf(KFindSuccess, &accounts[idx].iOwnerName); } Use KNullDesC instead of 0 if you don’t want to specify a descriptor.
  • 28. RPointerArray Similar to RArray, stores pointers to objects instead of directly storing copies of them Can be used for any type objects (also C-type!) (Nearly) the same functionality as RArray But does not support a key index due to complex structure of C-type objects. AlwaysuseTLinearOrder instead! (sorting, inserting, ...) Free memory with: Close() or Reset() // If array goes out of scope ResetAndDestroy() // If objects are owned by the array Andreas Jakl, 2008 28
  • 29. CArrays More flexible, but they have their disadvantages: Andreas Jakl, 2008 29
  • 30. Storing data Objects can be stored in different ways: Andreas Jakl, 2008 30 Array type: CArrayXX Fix VarorPtr Pak 7 5 12 element length
  • 31. Memory Layout Various memory layouts are supported: Andreas Jakl, 2008 31 Array type: CArrayXX Flat buffer Granularity = 4 Segmented Buffer (Doubly linked list)
  • 32. Flat / Segmented Buffers Flat Buffer: Stores entire data within a single heap cell When it’s full: During next append, data has to be transferred to a new allocated heap cell Use when: High speed pointer lookup is required Array resizing is expected to be infrequent Andreas Jakl, 2008 32 Flat buffer
  • 33. Flat / Segmented Buffers Segmented Buffer: Stores data in doubly-linked list of smaller segments Each segment = separate heap cell with fixed size When it’s full: New segment is allocated, old data remains in place Use for/when: Large arrays which resize frequently Elements frequently inserted into or deleted from the array Andreas Jakl, 2008 33 Segmented Buffer
  • 34. Overview Several combinations are possible: Andreas Jakl, 2008 34 * Cleanup: 1.... Elements are owned and destroyed by the array (Reset(), Close()) 2.... Elements must be destroyed separately (ResetAndDestroy())
  • 35. CArrayX vs. RArray In short: UseRArray except when you need segmented memory! Next two slides: Detailed information, important for ASD-Exam Andreas Jakl, 2008 35
  • 36. CArrayXvs. RArray? CArray Disadvantages: Older API, sorting etc. is more difficult Constructs TPtr8-object for every array access  performance overhead! Two (!) assertion checks for each array access All manipulation-functions (AppendL(), InsertL(), ...) are only available with leave – can have disadvantages, requires TRAP for every access in functions that should not leave! Advantage: Segmented-memory versions available (CArrayFixSeg, CArrayPtrSeg) Andreas Jakl, 2008 36
  • 37. CArrayX vs. RArray? RArray Disadvantages: Element-size max. 640 bytes No segmented memory version available May have problems with non-word-aligned element size on hardware that enforces strict alignment Advantages: Better performance than counterparts (RArray CArrayFixFlat, RPointerArray  CArrayPtrFlat) R-Classes lower overhead than C-classes (No zero-fill on allocation, no virtual function table pointer) Andreas Jakl, 2008 37
  • 38. Test your Knowledge Did you understand everything? Andreas Jakl, 2008 38
  • 39. ASD-like Question – Easy Which of the following statements correctly describe the 'granularity' of Symbian OS dynamic arrays? A. Granularity represents the current number of elements in the array. B. Granularity represents the maximum size of the array. C. Granularity represents the amount by which the capacity of the array increases during a reallocation. D. Granularity represents the maximum number of elements the array can hold without reallocation when the array is first created. E. Granularity applies to arrays contained in either flat or segmented memory buffers. Andreas Jakl, 2008 39 Copyright Meme Education, 2006 http://www.meme-education.com/
  • 40. Solution A. Incorrect. Number of elements is equal to or less than the granularity, as arrays are not resized for every added / removed element (except when the granularity would be 1) B. Incorrect. Dynamic arrays are automatically reallocated, the granularity defines when this happens. C. Correct. D. Correct. E. Correct. Andreas Jakl, 2008 40
  • 41. ASD-like Question – Medium Which of the following statements about Symbian OS dynamic arrays are incorrect? A. When searching for an element in the array the search is always started at the low index and the search will always return with the first matching element. B. Symbian OS dynamic arrays must always be constructed on the heap. C. The maximum size of an element stored in RArray is bounded to an upper limit of 640 bytes. D. Only flat and not pointer type dynamic arrays can be sorted. E. Only the CArrayX classes can be used in user-side code. RArray and RPointerArray are intended for kernel-side arrays only. Andreas Jakl, 2008 41 Copyright Meme Education, 2006 http://www.meme-education.com/
  • 42. Solution A. Correct. B. Incorrect. RArrays can be constructed on the stack, even though they store their data on the heap. C. Correct. D. Incorrect. All dynamic array types provide methods for sorting. E. Incorrect. RArrays and RPointerArrays can be used on the Kernel-side as well. Only a few functions are not available to code running on the kernel side (see SDK-doc). Andreas Jakl, 2008 42
  • 43. ASD-like Question Which of the following are valid reasons for using one of the CArrayX classes rather than RArray or RPointerArray? A. When using the CArrayX classes, two assertion checks occur for every array access. As a result, CArrayX element access is less error-prone. B. To access an element of RArray requires a TPtr8 to be constructed around it. This makes access slower than for CArrayX arrays. C. Unlike CArrayX flat arrays, RArray stores objects in the array as word (4 byte) aligned quantities and it is possible to get an unhandled exception on hardware that enforces strict alignment. D. Some CArrayX classes provide support for segmented memory storage. E. The size of elements in RArray is limited to a maximum of 640 bytes. This is not the case for elements of the CArrayX array classes. Andreas Jakl, 2008 43 Copyright Meme Education, 2006 http://www.meme-education.com/
  • 44. Solution A.Not valid. All Symbian OS arrays include range-checks. Two of them are not twice as secure... B. Not valid. It’s the other way round, CArrayX-arrays require a TPtr8-object. RArrays are more efficient. C. Valid. D. Valid. E. Valid. Andreas Jakl, 2008 44
  • 45. … let’s move to the Challenges! Try it for your own Andreas Jakl, 2008 45