00001 #ifndef ITEM_CONTAINER_HXX_
00002 # define ITEM_CONTAINER_HXX_
00003
00004 # include "item_container.hh"
00005 # include "item_name.hh"
00006
00007 namespace objects
00008 {
00009 inline bool ItemContainer::operator ==(const ItemContainer &i) const
00010 {
00011 return this == &ItemContainer::get(i.get_id());
00012 }
00013
00014 inline int
00015 ItemContainer::get_item_count() const
00016 {
00017 return (int)_item_map.size();
00018 }
00019
00020 inline const ItemContainer::PossessedItemMap &
00021 ItemContainer::get_item_map() const
00022 {
00023 return _item_map;
00024 }
00025
00026 inline int ItemContainer::get_free_slot_count() const
00027 {
00028 return get_capacity() - get_item_count();
00029 }
00030
00031 template<int ITEM_CONTAINER_ID, int CAPACITY>
00032 DefItemContainer<ITEM_CONTAINER_ID, CAPACITY>::DefItemContainer() : ItemContainer()
00033 {
00034 }
00035
00036 template<int ITEM_CONTAINER_ID, int CAPACITY>
00037 void
00038 DefItemContainer<ITEM_CONTAINER_ID, CAPACITY>::accept(ItemVisitor &iv)
00039 {
00040 iv(*this);
00041 }
00042
00043 template<int ITEM_CONTAINER_ID, int CAPACITY>
00044 int
00045 DefItemContainer<ITEM_CONTAINER_ID, CAPACITY>::get_id() const
00046 {
00047 return DefItemContainer<ITEM_CONTAINER_ID,CAPACITY>::id;
00048 }
00049
00050 template<int ITEM_CONTAINER_ID, int CAPACITY>
00051 const std::string &
00052 DefItemContainer<ITEM_CONTAINER_ID, CAPACITY>::get_name()
00053 {
00054 ItemName in;
00055 in(*this);
00056 return in.result();
00057 }
00058
00059 template<int ITEM_CONTAINER_ID, int CAPACITY>
00060 void
00061 DefItemContainer<ITEM_CONTAINER_ID, CAPACITY>::print(std::ostream &os)
00062 {
00063 os << get_name();
00064 }
00065
00066 template<int ITEM_CONTAINER_ID, int CAPACITY>
00067 inline int
00068 DefItemContainer<ITEM_CONTAINER_ID, CAPACITY>::get_capacity() const
00069 {
00070 return CAPACITY;
00071 }
00072
00073 inline std::ostream &
00074 operator <<(std::ostream &os, const ItemContainer &ic)
00075 {
00076 (const_cast<ItemContainer &>(ic)).print(os);
00077 return os;
00078 }
00079 }
00080
00081 #endif