#include "T2Archive.h" #include "T2RequestArray.h" #include "T2RequestArrayList.h" T2RequestArrayList::T2RequestArrayList() : LArray(sizeof(T2RequestArray *)) { T2RequestArray *requestArray = new T2RequestArray(1000); Add(requestArray); } /*virtual*/ T2RequestArrayList::~T2RequestArrayList() { LArrayIterator iterator(*this); T2RequestArray *requestArray; while (iterator.Next(&requestArray)) delete requestArray; } void T2RequestArrayList::Add(T2RequestArray* requestArray) { InsertItemsAt(1, mItemCount + 1, &requestArray); } unsigned int T2RequestArrayList::GetItemCount() { return GetCount(); } T2RequestArray* T2RequestArrayList::GetItemAt(int index) { T2RequestArray *requestArray; if (FetchItemAt(index, &requestArray)) return requestArray; else return NULL; } T2Request* T2RequestArrayList::GetRequestByID(unsigned int requestID) { if (requestID == 0) return NULL; if (requestID < 1000) return NULL; int group = (requestID - 1000) / 64; int indexInGroup = (requestID - 1000) % 64; T2RequestArray *requestArray = GetItemAt(group + 1); if (requestArray) return requestArray->GetIndexRequest(indexInGroup); else return NULL; } T2Request* T2RequestArrayList::FindUnusedRequest() { T2Request *result = NULL; LArrayIterator iterator(*this); T2RequestArray *requestArray = NULL; while (!result && iterator.Next(&requestArray)) { result = requestArray->FindUnusedRequest(); } if (!result) { unsigned int newStartID = 1000; if (requestArray) newStartID = requestArray->GetStartID() + 64; requestArray = new T2RequestArray(newStartID); if (requestArray) { Add(requestArray); result = requestArray->FindUnusedRequest(); } } return result; } void T2RequestArrayList::BreakoutEmergency(T2TowerDoc* towerDoc) { LArrayIterator iterator(*this); T2RequestArray *requestArray; while (iterator.Next(&requestArray)) requestArray->BreakoutEmergency(towerDoc); } void T2RequestArrayList::Read(T2Archive& archive, T2TowerDoc* towerDoc) { int count; archive >> count; RemoveItemsAt(GetCount(), 1); unsigned int startID = 1000; for (int i = 0; i < count; i++) { T2RequestArray *requestArray = new T2RequestArray(startID); requestArray->Read(archive, towerDoc); Add(requestArray); startID += 64; } } void T2RequestArrayList::Write(T2Archive& archive) { int count = GetItemCount(); archive << count; LArrayIterator iterator(*this); T2RequestArray *requestArray; while (iterator.Next(&requestArray)) requestArray->Write(archive); } void T2RequestArrayList::DispatchIdle(T2TowerDoc* towerDoc) { LArrayIterator iterator(*this); T2RequestArray *requestArray; while (iterator.Next(&requestArray)) requestArray->DispatchIdle(towerDoc, 0); }