メインページ | ネームスペース一覧 | クラス階層 | アルファベット順一覧 | 構成 | ファイル一覧 | ネームスペースメンバ | 構成メンバ | ファイルメンバ

item_container.hh

説明を見る。
00001 #ifndef ITEM_CONTAINER_HH_
00002 # define ITEM_CONTAINER_HH_
00003 
00004 # include <map>
00005 # include <iostream>
00006 
00007 # include "objects_fwd.hh"
00008 
00009 # define UNKNOWN_ITEM_CLASS (-1)
00010 
00011 namespace objects
00012 {
00013   class ItemContainerFactory
00014   {
00015   public:
00016     ItemContainerFactory();
00017     ~ItemContainerFactory();
00018     
00019     static ItemContainerFactory &get_instance();
00020     const ItemContainer &get(int id);
00021 
00022   protected:
00023     std::map<int, ItemContainer *> _item_container_map;
00024 
00025     void register_item(ItemContainer &i);
00026   };
00027 
00028   class ItemContainer
00029   {
00030   public:
00031     typedef std::map<int, PossessedItem *> PossessedItemMap;
00032 
00033   public:
00034     ItemContainer();
00035 
00036     static const ItemContainer &get(int id);
00037     virtual void accept(ItemVisitor &iv) = 0;
00038     virtual void print(std::ostream &os) = 0;
00039 
00040     virtual int get_id() const = 0;
00041     virtual const std::string &get_name() = 0;
00042 
00043     bool operator ==(const ItemContainer &i) const;
00044 
00045   public: // Container specific.
00046     virtual int get_capacity() const = 0;
00047     int get_item_count() const;
00048     const PossessedItemMap &get_item_map() const;
00049 
00050     // Add/remove/set slots.
00051     PossessedItem *get_item(int position);
00052     void set_item(int position, PossessedItem *pi);
00053     void remove_item(int position);
00054 
00055     // Free slots.
00056     int get_next_free_slot() const;
00057     int get_free_slot_count() const;
00058 
00059   protected:
00060     PossessedItemMap _item_map;
00061   };
00062 
00063   template<int ITEM_CONTAINER_ID, int CAPACITY>
00064   class DefItemContainer : public ItemContainer
00065   {
00066   public:
00067     DefItemContainer();
00068 
00069     static const int id = ITEM_CONTAINER_ID;
00070 
00071     void accept(ItemVisitor &iv);
00072     int get_id() const;
00073     const std::string &get_name();
00074     void print(std::ostream &os);
00075 
00076     int get_capacity() const;
00077   };
00078 
00079   std::ostream &operator <<(std::ostream &os, const ItemContainer &ic);
00080 }
00081 
00082 # include "item_container.hxx"
00083 
00084 #endif

Cronous Emulatorに対してWed Aug 17 06:01:25 2005に生成されました。  doxygen 1.4.2-20050421