// This Source Code Form is subject to the terms of the Mozilla Public // License, version 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at http://mozilla.org/MPL/2.0/. #pragma once #include <memory> #include <string> #include <vector> #include <functional> #include <weechat/weechat-plugin.h> #define weechat_plugin ::weechat::plugin::instance.get() namespace weechat { extern "C" { //__attribute__((visibility("default"))) int weechat_plugin_init(struct t_weechat_plugin *plugin, int argc, char *argv[]); int weechat_plugin_end(struct t_weechat_plugin *plugin); } typedef std::unique_ptr< struct t_weechat_plugin, std::function<void(struct t_weechat_plugin *)>> plugin_ptr; class plugin : public plugin_ptr { public: plugin(); plugin(plugin_ptr ptr); plugin(struct t_weechat_plugin *ptr); inline std::string const& name() const { return this->m_name; } inline std::string const& version() const { return this->m_version; } bool init(std::vector<std::string> args); bool end(); static plugin instance; private: std::string m_name; std::string m_version; }; }