/* This file is part of solidity. solidity is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. solidity is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with solidity. If not, see . */ /** * Container of (unparsed) Yul functions identified by name which are meant to be generated * only once. */ #pragma once #include #include #include namespace dev { namespace solidity { /** * Container of (unparsed) Yul functions identified by name which are meant to be generated * only once. */ class MultiUseYulFunctionCollector { public: /// Helper function that uses @a _creator to create a function and add it to /// @a m_requestedFunctions if it has not been created yet and returns @a _name in both /// cases. std::string createFunction(std::string const& _name, std::function const& _creator); /// @returns concatenation of all generated functions. /// Clears the internal list, i.e. calling it again will result in an /// empty return value. std::string requestedFunctions(); private: /// Map from function name to code for a multi-use function. std::map m_requestedFunctions; }; } }