joey shelton / LED_Demo

Dependencies:   MAX44000 PWM_Tone_Library nexpaq_mdk

Fork of LED_Demo by Maxim nexpaq

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers FunctionPointer.h Source File

FunctionPointer.h

00001 /* mbed Microcontroller Library
00002  * Copyright (c) 2006-2015 ARM Limited
00003  *
00004  * Licensed under the Apache License, Version 2.0 (the "License");
00005  * you may not use this file except in compliance with the License.
00006  * You may obtain a copy of the License at
00007  *
00008  *     http://www.apache.org/licenses/LICENSE-2.0
00009  *
00010  * Unless required by applicable law or agreed to in writing, software
00011  * distributed under the License is distributed on an "AS IS" BASIS,
00012  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013  * See the License for the specific language governing permissions and
00014  * limitations under the License.
00015  */
00016 #ifndef MBED_FUNCTIONPOINTER_H
00017 #define MBED_FUNCTIONPOINTER_H
00018 
00019 #include "Callback.h"
00020 #include "toolchain.h"
00021 #include <string.h>
00022 #include <stdint.h>
00023 
00024 namespace mbed {
00025 
00026 
00027 // Declarations for backwards compatibility
00028 // To be foward compatible, code should adopt the Callback class
00029 template <typename R, typename A1>
00030 class FunctionPointerArg1 : public Callback<R(A1)> {
00031 public:
00032     MBED_DEPRECATED_SINCE("mbed-os-5.1",
00033         "FunctionPointerArg1<R, A> has been replaced by Callback<R(A)>")
00034     FunctionPointerArg1(R (*function)(A1) = 0)
00035         : Callback<R(A1)>(function) {}
00036 
00037     template<typename T>
00038     MBED_DEPRECATED_SINCE("mbed-os-5.1",
00039         "FunctionPointerArg1<R, A> has been replaced by Callback<R(A)>")
00040     FunctionPointerArg1(T *object, R (T::*member)(A1))
00041         : Callback<R(A1)>(object, member) {}
00042 
00043     R (*get_function())(A1) {
00044         return *reinterpret_cast<R (**)(A1)>(this);
00045     }
00046 
00047     R call(A1 a1) const {
00048         if (!Callback<R(A1)>::operator bool()) {
00049             return (R)0;
00050         }
00051 
00052         return Callback<R(A1)>::call(a1);
00053     }
00054 
00055     R operator()(A1 a1) const {
00056         return Callback<R(A1)>::call(a1);
00057     }
00058 };
00059 
00060 template <typename R>
00061 class FunctionPointerArg1<R, void> : public Callback<R()> {
00062 public:
00063     MBED_DEPRECATED_SINCE("mbed-os-5.1",
00064         "FunctionPointer has been replaced by Callback<void()>")
00065     FunctionPointerArg1(R (*function)() = 0)
00066         : Callback<R()>(function) {}
00067 
00068     template<typename T>
00069     MBED_DEPRECATED_SINCE("mbed-os-5.1",
00070         "FunctionPointer has been replaced by Callback<void()>")
00071     FunctionPointerArg1(T *object, R (T::*member)())
00072         : Callback<R()>(object, member) {}
00073 
00074     R (*get_function())() {
00075         return *reinterpret_cast<R (**)()>(this);
00076     }
00077 
00078     R call() const {
00079         if (!Callback<R()>::operator bool()) {
00080             return (R)0;
00081         }
00082 
00083         return Callback<R()>::call();
00084     }
00085 
00086     R operator()() const {
00087         return Callback<R()>::call();
00088     }
00089 };
00090 
00091 typedef FunctionPointerArg1<void, void> FunctionPointer;
00092 
00093 
00094 } // namespace mbed
00095 
00096 #endif