/***************************************************************************** *** FILE: array_list.cpp *** DATE: 04/09/2004 *** AUTHOR: Daniel Dementiev *** GOAL: This short example shows how to deal with ArrayList object from *** System::Collections namespace. *** To build the project run: *** ...> cl array_list.cpp /clr *****************************************************************************/ #using using namespace System; using namespace System::Collections; __gc class BattleObject { private: static int nextID = 1; unsigned int priority; unsigned int objID; protected: static DateTime dtm; static Random *rnd = new Random( (int)dtm.Now.Ticks ); int rand(int max) { return rnd->Next(max)+1; }; public: BattleObject() : objID(nextID++), priority(rand(100)) {}; __property unsigned int get_ID() { return objID; }; __property unsigned int get_Priority() { return priority; }; // operators static bool op_LessThan(const BattleObject &left, const BattleObject &right) { return left.priority < right.priority; } static bool op_GreaterThan(const BattleObject &left, const BattleObject &right) { return left.priority > right.priority; } }; // structure for comparing BattleObject elements __gc struct BOComparer : IComparer { int Compare(Object *a, Object *b) { BattleObject *left = dynamic_cast(a); BattleObject *right = dynamic_cast(b); return -(left->Priority - right->Priority); } }; void main() { int i; ArrayList *al = new ArrayList(); IEnumerator *item; BattleObject *robot; for(i=0;i<10;i++) al->Add( new BattleObject() ); Console::WriteLine(S"Initial array:"); item = al->GetEnumerator(); while( item->MoveNext() ){ robot = dynamic_cast(item->Current); Console::WriteLine(S"Robot: ID({0}) PR({1})", robot->ID.ToString(), robot->Priority.ToString()); } Console::WriteLine(S"--------------"); al->Sort( new BOComparer() ); Console::WriteLine(S"Sorted array:"); item = al->GetEnumerator(); while( item->MoveNext() ){ robot = dynamic_cast(item->Current); Console::WriteLine(S"Robot: ID({0}) PR({1})", robot->ID.ToString(), robot->Priority.ToString()); } Console::WriteLine(S"--------------"); Console::WriteLine(S"After removing two elements array:"); al->RemoveAt(5); //int ind = al->IndexOf(robot); al->Remove(robot); item = al->GetEnumerator(); while( item->MoveNext() ){ robot = dynamic_cast(item->Current); Console::WriteLine(S"Robot: ID({0}) PR({1})", robot->ID.ToString(), robot->Priority.ToString()); } Console::WriteLine(S"--------------"); Console::WriteLine(S"Final array accessed through properties 'Count' and 'Item[]':"); for(i=0;iCount;i++){ robot = dynamic_cast(al->Item[i]); Console::WriteLine(S"Robot: ID({0}) PR({1})", robot->ID.ToString(), robot->Priority.ToString()); } }