]>
git.saurik.com Git - cydia.git/blob - Menes/Function.h
1 /* Cydia - iPhone UIKit Front-End for Debian APT
2 * Copyright (C) 2008-2015 Jay Freeman (saurik)
5 /* GNU General Public License, Version 3 {{{ */
7 * Cydia is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published
9 * by the Free Software Foundation, either version 3 of the License,
10 * or (at your option) any later version.
12 * Cydia is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with Cydia. If not, see <http://www.gnu.org/licenses/>.
22 #ifndef Menes_Function_H
23 #define Menes_Function_H
25 #include "CyteKit/UCPlatform.h"
27 template <typename Result_
, typename
... Args_
>
40 Abstract(const Abstract
&) = delete;
41 Abstract
&operator =(const Abstract
&) = delete;
51 if (--references_
== 0)
55 virtual Result_
operator()(Args_
... args
) const = 0;
58 template <typename Callable_
>
66 Concrete(const Callable_
&callable
) :
71 virtual Result_
operator()(Args_
... args
) const {
72 return callable_(args
...);
80 if (abstract_
!= NULL
)
84 void Copy(Abstract
*abstract
) {
91 template <typename Callable_
>
92 void Assign(const Callable_
&callable
) {
93 Copy(new Concrete
<Callable_
>(callable
));
102 Function(decltype(nullptr)) :
107 Function(const Function
&function
) :
108 abstract_(function
.abstract_
)
113 template <typename Callable_
>
114 Function(const Callable_
&callable
) :
124 Function
&operator =(decltype(nullptr)) {
129 Function
&operator =(const Function
&function
) {
130 Copy(function
.abstract_
);
134 Result_
operator()(Args_
... args
) const {
135 return (*abstract_
)(args
...);
143 template <typename Callable_
>
144 Function
&operator =(const Callable_
&callable
) {
149 operator bool() const {
150 return abstract_
!= NULL
;
154 #endif//Menes_Function_H