// Copyright (C) 2024 Simon Quigley // // This program 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. // // This program 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 this program. If not, see . #ifndef CALLABLE_WRAPPER_H #define CALLABLE_WRAPPER_H #include #include #include #ifndef LAUNCHPAD_API #ifdef BUILDING_LAUNCHPAD #define LAUNCHPAD_API __attribute__((visibility("default"))) #else #define LAUNCHPAD_API #endif #endif // Forward declaration class launchpad; template class CallableWrapper { public: // Default constructor CallableWrapper() : lp_ptr_(nullptr), func_(nullptr) {} // Updated constructor to accept a raw pointer CallableWrapper(launchpad* lp_ptr, std::function(const std::string&)> func) : lp_ptr_(lp_ptr), func_(std::move(func)) {} std::optional operator[](const std::string& key) const { if (lp_ptr_ && func_) { return func_(key); } return std::nullopt; } private: launchpad* lp_ptr_; std::function(const std::string&)> func_; }; #endif