/* * Copyright 2020 The WebRTC Project Authors. All rights reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #ifndef RTC_BASE_UNTYPED_FUNCTION_H_ #define RTC_BASE_UNTYPED_FUNCTION_H_ #include <cstddef> #include <cstring> #include <memory> #include <type_traits> #include <utility> #include "rtc_base/system/assume.h" namespace webrtc { namespace webrtc_function_impl { FunVoid; // Inline storage size is this many machine words. enum : size_t { … }; VoidUnion; // Returns the number of elements of the `inline_storage` array required to // store an object of type T. template <typename T> constexpr size_t InlineStorageSize() { … } template <typename T> struct CallHelpers; CallHelpers<RetT (ArgT...)>; } // namespace webrtc_function_impl // A class that holds (and owns) any callable. The same function call signature // must be provided when constructing and calling the object. // // The point of not having the call signature as a class template parameter is // to have one single concrete type for all signatures; this reduces binary // size. class UntypedFunction final { … }; } // namespace webrtc #endif // RTC_BASE_UNTYPED_FUNCTION_H_