Fix a memleak pointed by @Zeno- in MeshUpdateQueue
[oweals/minetest.git] / src / craftdef.h
index cc7a0619cca7ea723d57153aed1fbc44a0085db5..bdd741f7c08293ed4014722d6ae194df351d249b 100644 (file)
@@ -97,7 +97,7 @@ struct CraftOutput
        CraftOutput():
                item(""), time(0)
        {}
-       CraftOutput(std::string item_, float time_):
+       CraftOutput(const std::string &item_, float time_):
                item(item_), time(time_)
        {}
        std::string dump() const;
@@ -124,12 +124,10 @@ struct CraftReplacements
        CraftReplacements():
                pairs()
        {}
-       CraftReplacements(std::vector<std::pair<std::string, std::string> > pairs_):
+       CraftReplacements(const std::vector<std::pair<std::string, std::string> > &pairs_):
                pairs(pairs_)
        {}
        std::string dump() const;
-       void serialize(std::ostream &os) const;
-       void deSerialize(std::istream &is);
 };
 
 /*
@@ -141,9 +139,6 @@ public:
        CraftDefinition(){}
        virtual ~CraftDefinition(){}
 
-       void serialize(std::ostream &os) const;
-       static CraftDefinition* deSerialize(std::istream &is);
-
        // Returns type of crafting definition
        virtual std::string getName() const=0;
 
@@ -155,7 +150,8 @@ public:
        // the inverse of the above
        virtual CraftInput getInput(const CraftOutput &output, IGameDef *gamedef) const=0;
        // Decreases count of every input item
-       virtual void decrementInput(CraftInput &input, IGameDef *gamedef) const=0;
+       virtual void decrementInput(CraftInput &input,
+               std::vector<ItemStack> &output_replacements, IGameDef *gamedef) const=0;
 
        virtual CraftHashType getHashType() const = 0;
        virtual u64 getHash(CraftHashType type) const = 0;
@@ -164,9 +160,6 @@ public:
        virtual void initHash(IGameDef *gamedef) = 0;
 
        virtual std::string dump() const=0;
-protected:
-       virtual void serializeBody(std::ostream &os) const=0;
-       virtual void deSerializeBody(std::istream &is, int version)=0;
 };
 
 /*
@@ -195,7 +188,8 @@ public:
        virtual bool check(const CraftInput &input, IGameDef *gamedef) const;
        virtual CraftOutput getOutput(const CraftInput &input, IGameDef *gamedef) const;
        virtual CraftInput getInput(const CraftOutput &output, IGameDef *gamedef) const;
-       virtual void decrementInput(CraftInput &input, IGameDef *gamedef) const;
+       virtual void decrementInput(CraftInput &input,
+               std::vector<ItemStack> &output_replacements, IGameDef *gamedef) const;
 
        virtual CraftHashType getHashType() const;
        virtual u64 getHash(CraftHashType type) const;
@@ -204,10 +198,6 @@ public:
 
        virtual std::string dump() const;
 
-protected:
-       virtual void serializeBody(std::ostream &os) const;
-       virtual void deSerializeBody(std::istream &is, int version);
-
 private:
        // Output itemstring
        std::string output;
@@ -247,7 +237,8 @@ public:
        virtual bool check(const CraftInput &input, IGameDef *gamedef) const;
        virtual CraftOutput getOutput(const CraftInput &input, IGameDef *gamedef) const;
        virtual CraftInput getInput(const CraftOutput &output, IGameDef *gamedef) const;
-       virtual void decrementInput(CraftInput &input, IGameDef *gamedef) const;
+       virtual void decrementInput(CraftInput &input,
+               std::vector<ItemStack> &output_replacements, IGameDef *gamedef) const;
 
        virtual CraftHashType getHashType() const;
        virtual u64 getHash(CraftHashType type) const;
@@ -256,10 +247,6 @@ public:
 
        virtual std::string dump() const;
 
-protected:
-       virtual void serializeBody(std::ostream &os) const;
-       virtual void deSerializeBody(std::istream &is, int version);
-
 private:
        // Output itemstring
        std::string output;
@@ -294,7 +281,8 @@ public:
        virtual bool check(const CraftInput &input, IGameDef *gamedef) const;
        virtual CraftOutput getOutput(const CraftInput &input, IGameDef *gamedef) const;
        virtual CraftInput getInput(const CraftOutput &output, IGameDef *gamedef) const;
-       virtual void decrementInput(CraftInput &input, IGameDef *gamedef) const;
+       virtual void decrementInput(CraftInput &input,
+               std::vector<ItemStack> &output_replacements, IGameDef *gamedef) const;
 
        virtual CraftHashType getHashType() const { return CRAFT_HASH_TYPE_COUNT; }
        virtual u64 getHash(CraftHashType type) const { return 2; }
@@ -303,10 +291,6 @@ public:
 
        virtual std::string dump() const;
 
-protected:
-       virtual void serializeBody(std::ostream &os) const;
-       virtual void deSerializeBody(std::istream &is, int version);
-
 private:
        // This is a constant that is added to the wear of the result.
        // May be positive or negative, allowed range [-1,1].
@@ -340,7 +324,8 @@ public:
        virtual bool check(const CraftInput &input, IGameDef *gamedef) const;
        virtual CraftOutput getOutput(const CraftInput &input, IGameDef *gamedef) const;
        virtual CraftInput getInput(const CraftOutput &output, IGameDef *gamedef) const;
-       virtual void decrementInput(CraftInput &input, IGameDef *gamedef) const;
+       virtual void decrementInput(CraftInput &input,
+               std::vector<ItemStack> &output_replacements, IGameDef *gamedef) const;
 
        virtual CraftHashType getHashType() const;
        virtual u64 getHash(CraftHashType type) const;
@@ -349,10 +334,6 @@ public:
 
        virtual std::string dump() const;
 
-protected:
-       virtual void serializeBody(std::ostream &os) const;
-       virtual void deSerializeBody(std::istream &is, int version);
-
 private:
        // Output itemstring
        std::string output;
@@ -378,10 +359,13 @@ public:
        CraftDefinitionFuel():
                recipe(""), hash_inited(false), burntime()
        {}
-       CraftDefinitionFuel(std::string recipe_,
+       CraftDefinitionFuel(const std::string &recipe_,
                        float burntime_,
                        const CraftReplacements &replacements_):
-               recipe(recipe_), hash_inited(false), burntime(burntime_), replacements(replacements_)
+               recipe(recipe_),
+               hash_inited(false),
+               burntime(burntime_),
+               replacements(replacements_)
        {}
        virtual ~CraftDefinitionFuel(){}
 
@@ -389,7 +373,8 @@ public:
        virtual bool check(const CraftInput &input, IGameDef *gamedef) const;
        virtual CraftOutput getOutput(const CraftInput &input, IGameDef *gamedef) const;
        virtual CraftInput getInput(const CraftOutput &output, IGameDef *gamedef) const;
-       virtual void decrementInput(CraftInput &input, IGameDef *gamedef) const;
+       virtual void decrementInput(CraftInput &input,
+               std::vector<ItemStack> &output_replacements, IGameDef *gamedef) const;
 
        virtual CraftHashType getHashType() const;
        virtual u64 getHash(CraftHashType type) const;
@@ -398,10 +383,6 @@ public:
 
        virtual std::string dump() const;
 
-protected:
-       virtual void serializeBody(std::ostream &os) const;
-       virtual void deSerializeBody(std::istream &is, int version);
-
 private:
        // Recipe itemstring
        std::string recipe;
@@ -426,10 +407,11 @@ public:
 
        // The main crafting function
        virtual bool getCraftResult(CraftInput &input, CraftOutput &output,
+                       std::vector<ItemStack> &output_replacements,
                        bool decrementInput, IGameDef *gamedef) const=0;
        virtual std::vector<CraftDefinition*> getCraftRecipes(CraftOutput &output,
                        IGameDef *gamedef, unsigned limit=0) const=0;
-       
+
        // Print crafting recipes for debugging
        virtual std::string dump() const=0;
 };
@@ -442,10 +424,15 @@ public:
 
        // The main crafting function
        virtual bool getCraftResult(CraftInput &input, CraftOutput &output,
+                       std::vector<ItemStack> &output_replacements,
                        bool decrementInput, IGameDef *gamedef) const=0;
-       virtual std::vector<CraftDefinition*> getCraftRecipes(CraftOutput &output, 
+       virtual std::vector<CraftDefinition*> getCraftRecipes(CraftOutput &output,
                        IGameDef *gamedef, unsigned limit=0) const=0;
 
+       virtual bool clearCraftRecipesByOutput(const CraftOutput &output, IGameDef *gamedef) = 0;
+       virtual bool clearCraftRecipesByInput(CraftMethod craft_method,
+                       unsigned int craft_grid_width, const std::vector<std::string> &recipe, IGameDef *gamedef) = 0;
+
        // Print crafting recipes for debugging
        virtual std::string dump() const=0;