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