/* This file is part of the TDE games library Copyright (C) 2001 Martin Heni (martin@heni-online.de) Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License version 2 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __KGAMEPROPERTYLIST_H_ #define __KGAMEPROPERTYLIST_H_ #include #include #include "kgamemessage.h" #include "kgameproperty.h" #include "kgamepropertyhandler.h" // AB: also see README.LIB! template class KGamePropertyList : public TQValueList, public KGamePropertyBase { public: /** * Typedefs */ typedef TQValueListIterator Iterator; typedef TQValueListConstIterator ConstIterator; KGamePropertyList() :TQValueList(), KGamePropertyBase() { } KGamePropertyList( const KGamePropertyList &a ) : TQValueList(a) { } uint findIterator(Iterator me) { Iterator it; uint cnt=0; for( it = this->begin(); it != this->end(); ++it ) { if (me==it) { return cnt; } cnt++; } return this->count(); } Iterator insert( Iterator it, const type& d ) { it=TQValueList::insert(it,d); TQByteArray b; TQDataStream s(b, IO_WriteOnly); KGameMessage::createPropertyCommand(s,KGamePropertyBase::IdCommand,id(),CmdInsert); int i=findIterator(it); s << i; s << d; if (policy() == PolicyClean || policy() == PolicyDirty) { if (mOwner) { mOwner->sendProperty(s); } } if (policy() == PolicyDirty || policy() == PolicyLocal) { extractProperty(b); } return it; } void prepend( const type& d) { insert(this->begin(),d); } void append( const type& d ) { TQByteArray b; TQDataStream s(b, IO_WriteOnly); KGameMessage::createPropertyCommand(s,KGamePropertyBase::IdCommand,id(),CmdAppend); s << d; if (policy() == PolicyClean || policy() == PolicyDirty) { if (mOwner) { mOwner->sendProperty(s); } } if (policy() == PolicyDirty || policy() == PolicyLocal) { extractProperty(b); } } Iterator erase( Iterator it ) { TQByteArray b; TQDataStream s(b, IO_WriteOnly); KGameMessage::createPropertyCommand(s,KGamePropertyBase::IdCommand,id(),CmdRemove); int i=findIterator(it); s << i; if (policy() == PolicyClean || policy() == PolicyDirty) { if (mOwner) { mOwner->sendProperty(s); } } if (policy() == PolicyDirty || policy() == PolicyLocal) { extractProperty(b); } //TODO: return value - is it correct for PolicyLocal|PolicyDirty? // return TQValueList::remove(it); return it; } Iterator remove( Iterator it ) { return erase(it); } void remove( const type& d ) { Iterator it=find(d); remove(it); } void clear() { TQByteArray b; TQDataStream s(b, IO_WriteOnly); KGameMessage::createPropertyCommand(s,KGamePropertyBase::IdCommand,id(),CmdClear); if (policy() == PolicyClean || policy() == PolicyDirty) { if (mOwner) { mOwner->sendProperty(s); } } if (policy() == PolicyDirty || policy() == PolicyLocal) { extractProperty(b); } } void load(TQDataStream& s) { kdDebug(11001) << "KGamePropertyList load " << id() << endl; TQValueList::clear(); uint size; type data; s >> size; for (unsigned int i=0;i> data; TQValueList::append(data); } if (isEmittingSignal()) emitSignal(); } void save(TQDataStream &s) { kdDebug(11001) << "KGamePropertyList save "<count(); s << size; Iterator it; for( it = this->begin(); it != this->end(); ++it ) { data=*it; s << data; } } void command(TQDataStream &s,int cmd,bool) { KGamePropertyBase::command(s, cmd); kdDebug(11001) << "---> LIST id="<> i >> data; it=this->at(i); TQValueList::insert(it,data); // kdDebug(11001) << "CmdInsert:id="<