Some inventory const-ification
authorGiuseppe Bilotta <giuseppe.bilotta@gmail.com>
Wed, 10 Aug 2011 09:38:49 +0000 (11:38 +0200)
committerGiuseppe Bilotta <giuseppe.bilotta@gmail.com>
Thu, 11 Aug 2011 13:22:35 +0000 (15:22 +0200)
src/content_nodemeta.cpp
src/inventory.cpp
src/inventory.h

index 6b8bf05ef549cc230bfd094fd4934c831786c5b2..433e6d04b23e372138eaee5f33d945fd295d00b9 100644 (file)
@@ -178,9 +178,9 @@ std::string FurnaceNodeMetadata::infoText()
        //return "Furnace";
        if(m_fuel_time >= m_fuel_totaltime)
        {
-               InventoryList *src_list = m_inventory->getList("src");
+               const InventoryList *src_list = m_inventory->getList("src");
                assert(src_list);
-               InventoryItem *src_item = src_list->getItem(0);
+               const InventoryItem *src_item = src_list->getItem(0);
 
                if(src_item)
                        return "Furnace is out of fuel";
@@ -219,7 +219,7 @@ bool FurnaceNodeMetadata::step(float dtime)
 
                InventoryList *src_list = m_inventory->getList("src");
                assert(src_list);
-               InventoryItem *src_item = src_list->getItem(0);
+               const InventoryItem *src_item = src_list->getItem(0);
                
                // Start only if there are free slots in dst, so that it can
                // accomodate any result item
@@ -268,7 +268,7 @@ bool FurnaceNodeMetadata::step(float dtime)
 
                InventoryList *fuel_list = m_inventory->getList("fuel");
                assert(fuel_list);
-               InventoryItem *fuel_item = fuel_list->getItem(0);
+               const InventoryItem *fuel_item = fuel_list->getItem(0);
 
                if(ItemSpec(ITEM_MATERIAL, CONTENT_TREE).checkItem(fuel_item))
                {
index 30a43e37f27725de6061e82865ceb96ad1e5240b..c413cc52f6d2be436293d28ce4b67a51f433f1cf 100644 (file)
@@ -139,12 +139,12 @@ ServerActiveObject* InventoryItem::createSAO(ServerEnvironment *env, u16 id, v3f
        MaterialItem
 */
 
-bool MaterialItem::isCookable()
+bool MaterialItem::isCookable() const
 {
        return item_material_is_cookable(m_content);
 }
 
-InventoryItem *MaterialItem::createCookResult()
+InventoryItem *MaterialItem::createCookResult() const
 {
        return item_material_create_cook_result(m_content);
 }
@@ -176,7 +176,7 @@ ServerActiveObject* CraftItem::createSAO(ServerEnvironment *env, u16 id, v3f pos
        return InventoryItem::createSAO(env, id, pos);
 }
 
-u16 CraftItem::getDropCount()
+u16 CraftItem::getDropCount() const
 {
        // Special cases
        s16 dc = item_craft_get_drop_count(m_subname);
@@ -186,12 +186,12 @@ u16 CraftItem::getDropCount()
        return InventoryItem::getDropCount();
 }
 
-bool CraftItem::isCookable()
+bool CraftItem::isCookable() const
 {
        return item_craft_is_cookable(m_subname);
 }
 
-InventoryItem *CraftItem::createCookResult()
+InventoryItem *CraftItem::createCookResult() const
 {
        return item_craft_create_cook_result(m_subname);
 }
@@ -416,7 +416,7 @@ InventoryList & InventoryList::operator = (const InventoryList &other)
        return *this;
 }
 
-std::string InventoryList::getName()
+const std::string &InventoryList::getName() const
 {
        return m_name;
 }
@@ -443,6 +443,13 @@ u32 InventoryList::getFreeSlots()
        return getSize() - getUsedSlots();
 }
 
+const InventoryItem * InventoryList::getItem(u32 i) const
+{
+       if(i > m_items.size() - 1)
+               return NULL;
+       return m_items[i];
+}
+
 InventoryItem * InventoryList::getItem(u32 i)
 {
        if(i > m_items.size() - 1)
@@ -545,7 +552,7 @@ InventoryItem * InventoryList::addItem(u32 i, InventoryItem *newitem)
 bool InventoryList::itemFits(u32 i, InventoryItem *newitem)
 {
        // If it is an empty position, it's an easy job.
-       InventoryItem *to_item = getItem(i);
+       const InventoryItem *to_item = getItem(i);
        if(to_item == NULL)
        {
                return true;
@@ -736,7 +743,15 @@ InventoryList * Inventory::getList(const std::string &name)
        return m_lists[i];
 }
 
-s32 Inventory::getListIndex(const std::string &name)
+const InventoryList * Inventory::getList(const std::string &name) const
+{
+       s32 i = getListIndex(name);
+       if(i == -1)
+               return NULL;
+       return m_lists[i];
+}
+
+const s32 Inventory::getListIndex(const std::string &name) const
 {
        for(u32 i=0; i<m_lists.size(); i++)
        {
@@ -866,7 +881,7 @@ void IMoveAction::apply(InventoryContext *c, InventoryManager *mgr)
        Craft checking system
 */
 
-bool ItemSpec::checkItem(InventoryItem *item)
+bool ItemSpec::checkItem(const InventoryItem *item) const
 {
        if(type == ITEM_NONE)
        {
@@ -916,7 +931,7 @@ bool ItemSpec::checkItem(InventoryItem *item)
        return true;
 }
 
-bool checkItemCombination(InventoryItem **items, ItemSpec *specs)
+bool checkItemCombination(InventoryItem const * const *items, const ItemSpec *specs)
 {
        u16 items_min_x = 100;
        u16 items_max_x = 100;
@@ -979,8 +994,8 @@ bool checkItemCombination(InventoryItem **items, ItemSpec *specs)
                u16 items_y = items_min_y + y;
                u16 specs_x = specs_min_x + x;
                u16 specs_y = specs_min_y + y;
-               InventoryItem *item = items[items_y * 3 + items_x];
-               ItemSpec &spec = specs[specs_y * 3 + specs_x];
+               const InventoryItem *item = items[items_y * 3 + items_x];
+               const ItemSpec &spec = specs[specs_y * 3 + specs_x];
 
                if(spec.checkItem(item) == false)
                        return false;
index 9d6020a8d9b189fc65de50a263db7510009e0d73..0e757a1e0334e8454d4eac1edb365af1ad9de668 100644 (file)
@@ -61,19 +61,19 @@ public:
        // Creates an object from the item, to be placed in the world.
        virtual ServerActiveObject* createSAO(ServerEnvironment *env, u16 id, v3f pos);
        // Gets amount of items that dropping one SAO will decrement
-       virtual u16 getDropCount(){ return getCount(); }
+       virtual u16 getDropCount() const { return getCount(); }
 
        /*
                Quantity methods
        */
 
        // Shall return true if the item can be add()ed to the other
-       virtual bool addableTo(InventoryItem *other)
+       virtual bool addableTo(const InventoryItem *other) const
        {
                return false;
        }
        
-       u16 getCount()
+       u16 getCount() const
        {
                return m_count;
        }
@@ -82,7 +82,7 @@ public:
                m_count = count;
        }
        // This should return something else for stackable items
-       virtual u16 freeSpace()
+       virtual u16 freeSpace() const
        {
                return 0;
        }
@@ -102,11 +102,11 @@ public:
        */
 
        // Whether it can be cooked
-       virtual bool isCookable(){return false;}
+       virtual bool isCookable() const {return false;}
        // Time of cooking
        virtual float getCookTime(){return 3.0;}
        // Result of cooking (can randomize)
-       virtual InventoryItem *createCookResult(){return NULL;}
+       virtual InventoryItem *createCookResult() const {return NULL;}
        
        // Eat, press, activate, whatever.
        // Called when item is right-clicked when lying on ground.
@@ -160,7 +160,7 @@ public:
                return os.str();
        }
 
-       virtual bool addableTo(InventoryItem *other)
+       virtual bool addableTo(const InventoryItem *other) const
        {
                if(std::string(other->getName()) != "MaterialItem")
                        return false;
@@ -169,7 +169,7 @@ public:
                        return false;
                return true;
        }
-       u16 freeSpace()
+       u16 freeSpace() const
        {
                if(m_count > QUANTITY_ITEM_MAX_COUNT)
                        return 0;
@@ -178,8 +178,8 @@ public:
        /*
                Other properties
        */
-       bool isCookable();
-       InventoryItem *createCookResult();
+       bool isCookable() const;
+       InventoryItem *createCookResult() const;
        /*
                Special methods
        */
@@ -289,9 +289,9 @@ public:
        }
 
        ServerActiveObject* createSAO(ServerEnvironment *env, u16 id, v3f pos);
-       u16 getDropCount();
+       u16 getDropCount() const;
 
-       virtual bool addableTo(InventoryItem *other)
+       virtual bool addableTo(const InventoryItem *other) const
        {
                if(std::string(other->getName()) != "CraftItem")
                        return false;
@@ -300,7 +300,7 @@ public:
                        return false;
                return true;
        }
-       u16 freeSpace()
+       u16 freeSpace() const
        {
                if(m_count > QUANTITY_ITEM_MAX_COUNT)
                        return 0;
@@ -311,8 +311,8 @@ public:
                Other properties
        */
 
-       bool isCookable();
-       InventoryItem *createCookResult();
+       bool isCookable() const;
+       InventoryItem *createCookResult() const;
 
        bool use(ServerEnvironment *env, Player *player);
        
@@ -467,7 +467,7 @@ public:
        InventoryList(const InventoryList &other);
        InventoryList & operator = (const InventoryList &other);
 
-       std::string getName();
+       const std::string &getName() const;
        u32 getSize();
        // Count used slots
        u32 getUsedSlots();
@@ -477,6 +477,7 @@ public:
        void setDirty(bool dirty=true){ m_dirty = dirty; }*/
        
        // Get pointer to item
+       const InventoryItem * getItem(u32 i) const;
        InventoryItem * getItem(u32 i);
        // Returns old item (or NULL). Parameter can be NULL.
        InventoryItem * changeItem(u32 i, InventoryItem *newitem);
@@ -529,6 +530,7 @@ public:
 
        InventoryList * addList(const std::string &name, u32 size);
        InventoryList * getList(const std::string &name);
+       const InventoryList * getList(const std::string &name) const;
        bool deleteList(const std::string &name);
        // A shorthand for adding items.
        // Returns NULL if the item was fully added, leftover otherwise.
@@ -542,7 +544,7 @@ public:
        
 private:
        // -1 if not found
-       s32 getListIndex(const std::string &name);
+       const s32 getListIndex(const std::string &name) const;
 
        core::array<InventoryList*> m_lists;
 };
@@ -689,14 +691,14 @@ struct ItemSpec
        {
        }
 
-       bool checkItem(InventoryItem *item);
+       bool checkItem(const InventoryItem *item) const;
 };
 
 /*
        items: a pointer to an array of 9 pointers to items
        specs: a pointer to an array of 9 ItemSpecs
 */
-bool checkItemCombination(InventoryItem **items, ItemSpec *specs);
+bool checkItemCombination(const InventoryItem * const*items, const ItemSpec *specs);
 
 #endif