The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Dependents:   hello SerialTestv11 SerialTestv12 Sierpinski ... more

mbed 2

This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.

Committer:
AnnaBridge
Date:
Wed Feb 20 20:53:29 2019 +0000
Revision:
172:65be27845400
Parent:
170:e95d10626187
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 156:ff21514d8981 1 /* mbed Microcontroller Library
AnnaBridge 156:ff21514d8981 2 * Copyright (c) 2006-2015 ARM Limited
AnnaBridge 172:65be27845400 3 * SPDX-License-Identifier: Apache-2.0
AnnaBridge 156:ff21514d8981 4 *
AnnaBridge 156:ff21514d8981 5 * Licensed under the Apache License, Version 2.0 (the "License");
AnnaBridge 156:ff21514d8981 6 * you may not use this file except in compliance with the License.
AnnaBridge 156:ff21514d8981 7 * You may obtain a copy of the License at
AnnaBridge 156:ff21514d8981 8 *
AnnaBridge 156:ff21514d8981 9 * http://www.apache.org/licenses/LICENSE-2.0
AnnaBridge 156:ff21514d8981 10 *
AnnaBridge 156:ff21514d8981 11 * Unless required by applicable law or agreed to in writing, software
AnnaBridge 156:ff21514d8981 12 * distributed under the License is distributed on an "AS IS" BASIS,
AnnaBridge 156:ff21514d8981 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
AnnaBridge 156:ff21514d8981 14 * See the License for the specific language governing permissions and
AnnaBridge 156:ff21514d8981 15 * limitations under the License.
AnnaBridge 156:ff21514d8981 16 */
AnnaBridge 156:ff21514d8981 17 #ifndef MBED_FUNCTIONPOINTER_H
AnnaBridge 156:ff21514d8981 18 #define MBED_FUNCTIONPOINTER_H
AnnaBridge 156:ff21514d8981 19
AnnaBridge 156:ff21514d8981 20 #include "platform/Callback.h"
AnnaBridge 156:ff21514d8981 21 #include "platform/mbed_toolchain.h"
AnnaBridge 156:ff21514d8981 22 #include <string.h>
AnnaBridge 156:ff21514d8981 23 #include <stdint.h>
AnnaBridge 156:ff21514d8981 24
AnnaBridge 156:ff21514d8981 25 namespace mbed {
AnnaBridge 156:ff21514d8981 26 /** \addtogroup platform */
AnnaBridge 158:1c57384330a6 27 /** @{*/
AnnaBridge 158:1c57384330a6 28 /**
AnnaBridge 158:1c57384330a6 29 * \defgroup platform_FunctionPointer FunctionPointer class
AnnaBridge 158:1c57384330a6 30 * @{
AnnaBridge 158:1c57384330a6 31 */
AnnaBridge 156:ff21514d8981 32
AnnaBridge 156:ff21514d8981 33 // Declarations for backwards compatibility
AnnaBridge 156:ff21514d8981 34 // To be foward compatible, code should adopt the Callback class
AnnaBridge 156:ff21514d8981 35 template <typename R, typename A1>
AnnaBridge 156:ff21514d8981 36 class FunctionPointerArg1 : public Callback<R(A1)> {
AnnaBridge 156:ff21514d8981 37 public:
AnnaBridge 156:ff21514d8981 38 MBED_DEPRECATED_SINCE("mbed-os-5.1",
AnnaBridge 170:e95d10626187 39 "FunctionPointerArg1<R, A> has been replaced by Callback<R(A)>")
AnnaBridge 170:e95d10626187 40 FunctionPointerArg1(R(*function)(A1) = 0)
AnnaBridge 156:ff21514d8981 41 : Callback<R(A1)>(function) {}
AnnaBridge 156:ff21514d8981 42
AnnaBridge 156:ff21514d8981 43 template<typename T>
AnnaBridge 156:ff21514d8981 44 MBED_DEPRECATED_SINCE("mbed-os-5.1",
AnnaBridge 170:e95d10626187 45 "FunctionPointerArg1<R, A> has been replaced by Callback<R(A)>")
AnnaBridge 170:e95d10626187 46 FunctionPointerArg1(T *object, R(T::*member)(A1))
AnnaBridge 156:ff21514d8981 47 : Callback<R(A1)>(object, member) {}
AnnaBridge 156:ff21514d8981 48
AnnaBridge 170:e95d10626187 49 R(*get_function())(A1)
AnnaBridge 170:e95d10626187 50 {
AnnaBridge 170:e95d10626187 51 return *reinterpret_cast<R(* *)(A1)>(this);
AnnaBridge 156:ff21514d8981 52 }
AnnaBridge 156:ff21514d8981 53
AnnaBridge 170:e95d10626187 54 R call(A1 a1) const
AnnaBridge 170:e95d10626187 55 {
AnnaBridge 156:ff21514d8981 56 if (!Callback<R(A1)>::operator bool()) {
AnnaBridge 156:ff21514d8981 57 return (R)0;
AnnaBridge 156:ff21514d8981 58 }
AnnaBridge 156:ff21514d8981 59
AnnaBridge 156:ff21514d8981 60 return Callback<R(A1)>::call(a1);
AnnaBridge 156:ff21514d8981 61 }
AnnaBridge 156:ff21514d8981 62
AnnaBridge 170:e95d10626187 63 R operator()(A1 a1) const
AnnaBridge 170:e95d10626187 64 {
AnnaBridge 156:ff21514d8981 65 return Callback<R(A1)>::call(a1);
AnnaBridge 156:ff21514d8981 66 }
AnnaBridge 156:ff21514d8981 67 };
AnnaBridge 156:ff21514d8981 68
AnnaBridge 156:ff21514d8981 69 template <typename R>
AnnaBridge 156:ff21514d8981 70 class FunctionPointerArg1<R, void> : public Callback<R()> {
AnnaBridge 156:ff21514d8981 71 public:
AnnaBridge 156:ff21514d8981 72 MBED_DEPRECATED_SINCE("mbed-os-5.1",
AnnaBridge 170:e95d10626187 73 "FunctionPointer has been replaced by Callback<void()>")
AnnaBridge 170:e95d10626187 74 FunctionPointerArg1(R(*function)() = 0)
AnnaBridge 156:ff21514d8981 75 : Callback<R()>(function) {}
AnnaBridge 156:ff21514d8981 76
AnnaBridge 156:ff21514d8981 77 template<typename T>
AnnaBridge 156:ff21514d8981 78 MBED_DEPRECATED_SINCE("mbed-os-5.1",
AnnaBridge 170:e95d10626187 79 "FunctionPointer has been replaced by Callback<void()>")
AnnaBridge 170:e95d10626187 80 FunctionPointerArg1(T *object, R(T::*member)())
AnnaBridge 156:ff21514d8981 81 : Callback<R()>(object, member) {}
AnnaBridge 156:ff21514d8981 82
AnnaBridge 170:e95d10626187 83 R(*get_function())()
AnnaBridge 170:e95d10626187 84 {
AnnaBridge 170:e95d10626187 85 return *reinterpret_cast<R(* *)()>(this);
AnnaBridge 156:ff21514d8981 86 }
AnnaBridge 156:ff21514d8981 87
AnnaBridge 170:e95d10626187 88 R call() const
AnnaBridge 170:e95d10626187 89 {
AnnaBridge 156:ff21514d8981 90 if (!Callback<R()>::operator bool()) {
AnnaBridge 156:ff21514d8981 91 return (R)0;
AnnaBridge 156:ff21514d8981 92 }
AnnaBridge 156:ff21514d8981 93
AnnaBridge 156:ff21514d8981 94 return Callback<R()>::call();
AnnaBridge 156:ff21514d8981 95 }
AnnaBridge 156:ff21514d8981 96
AnnaBridge 170:e95d10626187 97 R operator()() const
AnnaBridge 170:e95d10626187 98 {
AnnaBridge 156:ff21514d8981 99 return Callback<R()>::call();
AnnaBridge 156:ff21514d8981 100 }
AnnaBridge 156:ff21514d8981 101 };
AnnaBridge 156:ff21514d8981 102
AnnaBridge 156:ff21514d8981 103 typedef FunctionPointerArg1<void, void> FunctionPointer;
AnnaBridge 156:ff21514d8981 104
AnnaBridge 158:1c57384330a6 105 /**@}*/
AnnaBridge 158:1c57384330a6 106
AnnaBridge 158:1c57384330a6 107 /**@}*/
AnnaBridge 158:1c57384330a6 108
AnnaBridge 156:ff21514d8981 109
AnnaBridge 156:ff21514d8981 110 } // namespace mbed
AnnaBridge 156:ff21514d8981 111
AnnaBridge 156:ff21514d8981 112 #endif