aboutsummaryrefslogtreecommitdiffstats
path: root/ldid.hpp
diff options
context:
space:
mode:
authorJay Freeman (saurik) <saurik@saurik.com>2015-09-27 15:14:07 -0700
committerJay Freeman (saurik) <saurik@saurik.com>2015-09-27 15:14:07 -0700
commite6a376fc606bd28796dd1733af079d5a825c1b52 (patch)
tree947650fca74d2753bf149a7b647ffa670edf4850 /ldid.hpp
parenta0c715e9c070b60702407b8713b3874593ff833d (diff)
downloadldid-e6a376fc606bd28796dd1733af079d5a825c1b52.tar.gz
ldid-e6a376fc606bd28796dd1733af079d5a825c1b52.tar.zst
ldid-e6a376fc606bd28796dd1733af079d5a825c1b52.zip
Move Functor implementation to header for the API.
Diffstat (limited to 'ldid.hpp')
-rw-r--r--ldid.hpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/ldid.hpp b/ldid.hpp
index ad85f03..331c4b0 100644
--- a/ldid.hpp
+++ b/ldid.hpp
@@ -8,6 +8,43 @@
namespace ldid {
+// I wish Apple cared about providing quality toolchains :/
+
+template <typename Function_>
+class Functor;
+
+template <typename Type_, typename... Args_>
+class Functor<Type_ (Args_...)> {
+ public:
+ virtual Type_ operator ()(Args_... args) const = 0;
+};
+
+template <typename Function_>
+class FunctorImpl;
+
+template <typename Value_, typename Type_, typename... Args_>
+class FunctorImpl<Type_ (Value_::*)(Args_...) const> :
+ public Functor<Type_ (Args_...)>
+{
+ private:
+ const Value_ *value_;
+
+ public:
+ FunctorImpl(const Value_ &value) :
+ value_(&value)
+ {
+ }
+
+ virtual Type_ operator ()(Args_... args) const {
+ return (*value_)(args...);
+ }
+};
+
+template <typename Function_>
+FunctorImpl<decltype(&Function_::operator())> fun(const Function_ &value) {
+ return value;
+}
+
typedef std::map<uint32_t, std::string> Slots;
void Sign(void *idata, size_t isize, std::streambuf &output, const std::string &name, const std::string &entitlements, const std::string &key, const Slots &slots);