Template Classes to Manage Collections of Objects
Posted
by Per Ghosh
on March 21st, 1999
I created some templates that I use and it is working fine for me. The classes are designed to be fast and use very little memory. They store pointers to classes and not objects except one. If constructors, copy constructors, assignment and other things are added then the collection class becomes slower. And it is not much harder to work with the class if it stores pointers to a class instead of the whole object. Sometimes it is easier because you don't have to add functions needed for the collection class in object that is managed by it.
Usage Examples
1. How can I create a string class?CBuffer<char,'0'> bufferText; bufferText = "This is a text."; bufferText += " Some more text"; int iPosition = bufferText.Find( "Some" );2. How can I store some integer values but none of them has the value -1?
CBuffer<int,-1> bufferInt;3. How can I store some pointers?
CBuffer<void*,NULL> bufferPtr;4. I want to store some objects (CMyObject) in a array.
int iDummy; CMyObject* pMyObject; CArrayPtr<CMyObject> arrayToMyObject; arrayToMyObject.Add( new CMyObject() ); iDummy = 10; arrayToMyObject.Add( new CMyObject( iDummy ) ); iDummy = 20; arrayToMyObject.InsertAt( 1, new CMyObject( iDummy ) ); pMyObject = arrayToMyObject.GetAt( 0 ); iDummy = arrayToMyObject.GetSize(); // gets the value 3 arrayToMyObject.DeleteItems();5. I want to store CXxx in a hash.
CMapPtr<ULONG,CXxx> mapptrToXxx; mapptrToXxx.InitHashTable( 21 ); mapptrToXxx.SetAt( 10, new CXxx ); CXxx* pXxx; if ( mapptrToXxx.Lookup( 10, &pXxx ) == true ) { ... } mapptrToXxx.Empty( true );
Download
Download demo project - 16 KB templ_coll_demo.zip
Download source - 3 KB templ_coll_src.zip