Stroika Library 3.0d16
 
Loading...
Searching...
No Matches
Function.inl
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2025. All rights reserved
3 */
6
8
9 /*
10 ********************************************************************************
11 ****************************** Execution::Function *****************************
12 ********************************************************************************
13 */
14#if qCompilerAndStdLib_template_Requires_constraint_not_treated_constexpr_Buggy
15 template <typename FUNCTION_SIGNATURE>
16 template <typename CTOR_FUNC_SIG, enable_if_t<is_convertible_v<remove_cvref_t<CTOR_FUNC_SIG>, function<FUNCTION_SIGNATURE>> and
17 not derived_from<remove_cvref_t<CTOR_FUNC_SIG>, Function<FUNCTION_SIGNATURE>>>*>
18 inline Function<FUNCTION_SIGNATURE>::Function (CTOR_FUNC_SIG&& f)
19 : fFun_{forward<CTOR_FUNC_SIG> (f)}
20 , fOrdering_{fFun_ == nullptr ? OrderingType_{} : ++Private_::sFunctionObjectNextPtrID_}
21 {
22 Assert ((fOrdering_ == OrderingType_{}) == (fFun_ == nullptr));
23 }
24#elif !qCompilerAndStdLib_RequiresNotMatchInlineOutOfLineForTemplateClassBeingDefined_Buggy
25 template <typename FUNCTION_SIGNATURE>
26 template <typename CTOR_FUNC_SIG>
27 requires (is_convertible_v<remove_cvref_t<CTOR_FUNC_SIG>, function<FUNCTION_SIGNATURE>> and
28 not derived_from<remove_cvref_t<CTOR_FUNC_SIG>, Function<FUNCTION_SIGNATURE>>)
29 inline Function<FUNCTION_SIGNATURE>::Function (CTOR_FUNC_SIG&& f)
30 : fFun_{forward<CTOR_FUNC_SIG> (f)}
31 , fOrdering_{fFun_ == nullptr ? OrderingType_{} : ++Private_::sFunctionObjectNextPtrID_}
32 {
33 Assert ((fOrdering_ == OrderingType_{}) == (fFun_ == nullptr));
34 }
35#endif
36 template <typename FUNCTION_SIGNATURE>
37 inline Function<FUNCTION_SIGNATURE>::Function (nullptr_t)
38 : fFun_{}
39 {
40 Assert (fOrdering_ == OrderingType_{});
41 }
42 template <typename FUNCTION_SIGNATURE>
43 inline Function<FUNCTION_SIGNATURE>::operator STDFUNCTION () const
44 {
45 return fFun_;
46 }
47 template <typename FUNCTION_SIGNATURE>
48 template <typename... Args>
49 inline typename Function<FUNCTION_SIGNATURE>::result_type Function<FUNCTION_SIGNATURE>::operator() (Args... args) const
50 {
51 RequireNotNull (fFun_);
52 return fFun_ (forward<Args> (args)...);
53 }
54 template <typename FUNCTION_SIGNATURE>
55 inline strong_ordering Function<FUNCTION_SIGNATURE>::operator<=> (const Function& rhs) const
56 {
57 return fOrdering_ <=> rhs.fOrdering_;
58 }
59 template <typename FUNCTION_SIGNATURE>
60 inline bool Function<FUNCTION_SIGNATURE>::operator== (const Function& rhs) const
61 {
62 return fOrdering_ == rhs.fOrdering_;
63 }
64 template <typename FUNCTION_SIGNATURE>
66 {
67 return Characters::ToString (fOrdering_);
68 }
69
70}
#define RequireNotNull(p)
Definition Assertions.h:347
String is like std::u32string, except it is much easier to use, often much more space efficient,...
Definition String.h:201