| Home | nevrax.com |
|
msg_container.hGo to the documentation of this file.00001
00007 /* Copyright, 2000 Nevrax Ltd.
00008 *
00009 * This file is part of NEVRAX NEL.
00010 * NEVRAX NEL is free software; you can redistribute it and/or modify
00011 * it under the terms of the GNU General Public License as published by
00012 * the Free Software Foundation; either version 2, or (at your option)
00013 * any later version.
00014
00015 * NEVRAX NEL is distributed in the hope that it will be useful, but
00016 * WITHOUT ANY WARRANTY; without even the implied warranty of
00017 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
00018 * General Public License for more details.
00019
00020 * You should have received a copy of the GNU General Public License
00021 * along with NEVRAX NEL; see the file COPYING. If not, write to the
00022 * Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
00023 * MA 02111-1307, USA.
00024 */
00025
00026 #ifndef NL_IA_MSG_CONTAINER_H
00027 #define NL_IA_MSG_CONTAINER_H
00028
00029 namespace NLAIAGENT {
00030
00031 class IMessageBase;
00032
00033
00034 // Classe de base abstraite des containers de messages
00035 class IBasicMsgContainer : public NLAIC::IBasicInterface
00036 {
00037 protected:
00038
00039
00040 public:
00041 IBasicMsgContainer() { }
00042 IBasicMsgContainer(const IBasicMsgContainer &) {}
00043 virtual ~IBasicMsgContainer() { }
00044
00045 virtual void addMessage(IMessageBase *) = 0; // Ajout d'un message dans le container (il est cloné)
00046 virtual const IMessageBase *getMessage() = 0; // Récupère le message courant dans le container
00047 virtual void popMessage() = 0; // Retire le message courant du container
00048
00049
00050 virtual std::list<const IMessageBase *> *pumpMessages(const IBasicMessageGroup &) =0; // Renvoie une liste de tous les messages d'un groupe
00051
00052 virtual const sint32 size() const = 0;
00053 virtual std::list<const IMessageBase *> *operator[](const IBasicMessageGroup &) = 0;
00054 };
00055
00056 // Container de messages contenant un tableau de listes de messages, l'index
00057 // du tableau étant le groupe du message
00058 class CVectorMsgContainer : public IBasicMsgContainer
00059 {
00060 private:
00061 std::vector< std::list<const IMessageBase *> > _Messages;
00062 std::list<const IBasicMessageGroup *> _MsgIndex;
00063 sint32 _Size;
00064 sint32 _CurrentGrp;
00065
00066 sint32 findIndex(const IBasicMessageGroup &grp);
00067
00068 public:
00069 static const NLAIC::CIdentType IdVectorMsgContainer;
00070 public:
00071 CVectorMsgContainer();
00072 CVectorMsgContainer(const CVectorMsgContainer &);
00073 virtual ~CVectorMsgContainer();
00074
00075 virtual void save(NLMISC::IStream &);
00076 virtual void load(NLMISC::IStream &);
00077 virtual const NLAIC::IBasicType *clone() const;
00078 virtual const NLAIC::IBasicType *newInstance() const;
00079
00080 virtual const NLAIC::CIdentType &getType() const;
00081
00082 // TODO
00083 void getDebugString(std::string &t) const { }
00084
00085 virtual void addMessage(IMessageBase *);
00086 virtual std::list<const IMessageBase *> *CVectorMsgContainer::pumpMessages(const IBasicMessageGroup &);
00087
00088 // virtual list<const IMessageBase *> &pumpMessages() { return _Messages[0]; }
00089 virtual const IMessageBase *getMessage();
00090 virtual void popMessage();
00091
00092 virtual const sint32 size() const { return _Size; }
00093 virtual std::list<const IMessageBase *> *operator[](const IBasicMessageGroup &);
00094 };
00095 }
00096 #endif
|
||||||||||||||||||||||||