// kmmsglist.cpp #include "kmmsglist.h" #include #include //----------------------------------------------------------------------------- KMMsgList::KMMsgList(int initSize): KMMsgListInherited(initSize) { mHigh = size(); mCount = 0; clear(FALSE); } //----------------------------------------------------------------------------- KMMsgList::~KMMsgList() { clear(TRUE); } //----------------------------------------------------------------------------- void KMMsgList::clear(bool doDelete) { KMMsgBasePtr msg; long i; for (i=mHigh-1; i>=0; i--) { msg = at(i); KMMsgListInherited::at(i) = NULL; if (msg && doDelete) delete msg; } mHigh = 0; mCount = 0; } //----------------------------------------------------------------------------- bool KMMsgList::resize(int aSize) { int i, oldSize = size(); KMMsgBasePtr msg; assert(aSize>=0); // delete messages that will get lost, if any if (aSize < mHigh) { for (i=aSize; i=0); if (idx >= size()) { doubleSize = size() << 1; resize(idx>doubleSize ? idx+16 : doubleSize); } if (!at(idx) && aMsg) mCount++; else if (at(idx) && !aMsg) mCount--; delete at(idx); KMMsgListInherited::at(idx) = aMsg; if (!aMsg || idx >= mHigh) rethinkHigh(); } //----------------------------------------------------------------------------- void KMMsgList::insert(int idx, KMMsgBasePtr aMsg) { int i, doubleSize; assert(idx>=0); if (idx >= size()) { doubleSize = size() << 1; resize(idx>doubleSize ? idx+16 : doubleSize); } if (aMsg) mCount++; for (i=mHigh; i>idx; i--) KMMsgListInherited::at(i) = KMMsgListInherited::at(i-1); KMMsgListInherited::at(idx) = aMsg; mHigh++; } //----------------------------------------------------------------------------- int KMMsgList::append(KMMsgBasePtr aMsg) { int idx = mHigh; insert(idx, aMsg); // mHigh gets modified in here return idx; } //----------------------------------------------------------------------------- void KMMsgList::remove(int idx) { int i; assert(idx>=0 && idx0 && !at(mHigh-1)) mHigh--; } }