libjxl

FORK: libjxl patches used on blog
git clone https://git.neptards.moe/blog/libjxl.git
Log | Files | Refs | Submodules | README | LICENSE

c_callback_support.h (865B)


      1 // Copyright (c) the JPEG XL Project Authors. All rights reserved.
      2 //
      3 // Use of this source code is governed by a BSD-style
      4 // license that can be found in the LICENSE file.
      5 
      6 #ifndef LIB_JXL_BASE_C_CALLBACK_SUPPORT_H_
      7 #define LIB_JXL_BASE_C_CALLBACK_SUPPORT_H_
      8 
      9 #include <utility>
     10 
     11 namespace jxl {
     12 namespace detail {
     13 
     14 template <typename T>
     15 struct MethodToCCallbackHelper {};
     16 
     17 template <typename T, typename R, typename... Args>
     18 struct MethodToCCallbackHelper<R (T::*)(Args...)> {
     19   template <R (T::*method)(Args...)>
     20   static R Call(void *opaque, Args... args) {
     21     return (reinterpret_cast<T *>(opaque)->*method)(
     22         std::forward<Args>(args)...);
     23   }
     24 };
     25 
     26 }  // namespace detail
     27 }  // namespace jxl
     28 
     29 #define METHOD_TO_C_CALLBACK(method) \
     30   ::jxl::detail::MethodToCCallbackHelper<decltype(method)>::Call<method>
     31 
     32 #endif  // LIB_JXL_BASE_C_CALLBACK_SUPPORT_H_