The prosthetic control(MIT)

Committer:
ganlikun
Date:
Thu Jun 23 05:23:34 2022 +0000
Revision:
0:20e0c61e0684
01

Who changed what in which revision?

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