From: <sp...@us...> - 2004-02-26 20:21:31
|
Update of /cvsroot/rtk/rtk/test/core In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14368/test/core Added Files: vector0.cpp Log Message: Added tamplate based Vector class --- NEW FILE: vector0.cpp --- #include <rtk/Vector.h> #include "../test.h" #define PRINT(v,fmt) \ PRINTF(_R(#v " =")); \ for(int i = 0; i < v.GetCount(); i++) \ rprintf(_R(" '" fmt "'"), v[i]); \ rprintf(_R("\n")); // A simple class to track (de)allocations class A { public: A() { PRINTF(_R("A::A\n")); } ~A() { PRINTF(_R("A::~A\n")); } }; typedef VectorP<A*> VectorA; // A simple function to search a substring bool FindSubStr(RCHAR* str, RCHAR* sub) { return (rstrstr(str, sub) != NULL); } typedef Vector<RCHAR*>::SearchIterator<RCHAR*> Iter; int main(int argc, char* argv[]) { TITLE(_R("Test for the Vector template")); rprintf(_R("### Int vector ###\n")); STEP(IntVector v); STEP(v.Add(1)); STEP(v.Add(2)); STEP(v.Add(3)); STEP(v.Add(10, 1)); STEP(v.Remove(0)); STEP(PRINT(v, "%d")); STEP(v.Push(11)); STEP(v.Push(12)); STEP(v.Push(13)); STEP(PRINT(v, "%d")); OUT("Pop: %d", v.Pop()); OUT("Pop: %d", v.Pop()); OUT("Pop: %d", v.Pop()); STEP(PRINT(v, "%d")); STEP(v.Queue(21)); STEP(v.Queue(22)); STEP(PRINT(v, "%d")); OUT("Dequeue: %d", v.Dequeue()); OUT("Dequeue: %d", v.Dequeue()); STEP(PRINT(v, "%d")); rprintf(_R("### RCHAR* vector ###\n")); STEP(RCharVector vc); STEP(vc.Add(_R("Hi"))); STEP(vc.Add(_R("Everybody"))); STEP(vc.Add(_R("Out"))); STEP(vc.Add(_R("There"))); STEP(vc.Add(_R("Where"))); STEP(vc.Add(_R("Merely"))); STEP(vc.Add(_R("Erethnech"))); STEP(PRINT(vc, "%s")); OUT("Find first occurence of the substring 'ere': %d", vc.Find<RCHAR*>(FindSubStr, _R("ere"))); STEP(Iter* iter = vc.Search<RCHAR*>(FindSubStr, _R("ere"))); STEP(RCHAR* found); STEP(while (found = iter->Next()) rprintf(_R(" Found: %s\n"), found)); rprintf(_R("### Object vector ###\n")); STEP(VectorA * va = new VectorA()); STEP(va->Push(new A())); // A::A STEP(va->Push(new A())); // A::A STEP(va->Push(new A())); // A::A STEP(va->Remove(-1)); // NOP: idx out of range STEP(va->Remove(0)); // A::~A STEP(A* tmp = va->Pop()); // NOP: object is popped, but not deleted OUT("va->GetCount() = %d", va->GetCount()); STEP(delete va); // 1x A::~A (1 removed, 1 popped => 1 remained) STEP(delete tmp); // A::~A - let's not leave garbage return 0; } |