Ben Katz / mbed-dev_spine

Dependents:   SPIne CH_Communicatuin_Test CH_Communicatuin_Test2 MCP_SPIne ... more

Fork of mbed-dev-f303 by Ben Katz

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 "platform/Callback.h"
00020 #include "platform/mbed_toolchain.h"
00021 #include <string.h>
00022 #include <stdint.h>
00023 
00024 namespace mbed {
00025 /** \addtogroup platform */
00026 
00027 
00028 // Declarations for backwards compatibility
00029 // To be foward compatible, code should adopt the Callback class
00030 /**
00031  * @ingroup platform
00032  */
00033 template <typename R, typename A1>
00034 class FunctionPointerArg1 : public Callback<R(A1)> {
00035 public:
00036     MBED_DEPRECATED_SINCE("mbed-os-5.1",
00037         "FunctionPointerArg1<R, A> has been replaced by Callback<R(A)>")
00038     FunctionPointerArg1(R (*function)(A1) = 0)
00039         : Callback<R(A1)>(function) {}
00040 
00041     template<typename T>
00042     MBED_DEPRECATED_SINCE("mbed-os-5.1",
00043         "FunctionPointerArg1<R, A> has been replaced by Callback<R(A)>")
00044     FunctionPointerArg1(T *object, R (T::*member)(A1))
00045         : Callback<R(A1)>(object, member) {}
00046 
00047     R (*get_function())(A1) {
00048         return *reinterpret_cast<R (**)(A1)>(this);
00049     }
00050 
00051     R call(A1 a1) const {
00052         if (!Callback<R(A1)>::operator bool()) {
00053             return (R)0;
00054         }
00055 
00056         return Callback<R(A1)>::call(a1);
00057     }
00058 
00059     R operator()(A1 a1) const {
00060         return Callback<R(A1)>::call(a1);
00061     }
00062 };
00063 
00064 /**
00065  * @ingroup platform
00066  */
00067 template <typename R>
00068 class FunctionPointerArg1<R, void> : public Callback<R()> {
00069 public:
00070     MBED_DEPRECATED_SINCE("mbed-os-5.1",
00071         "FunctionPointer has been replaced by Callback<void()>")
00072     FunctionPointerArg1(R (*function)() = 0)
00073         : Callback<R()>(function) {}
00074 
00075     template<typename T>
00076     MBED_DEPRECATED_SINCE("mbed-os-5.1",
00077         "FunctionPointer has been replaced by Callback<void()>")
00078     FunctionPointerArg1(T *object, R (T::*member)())
00079         : Callback<R()>(object, member) {}
00080 
00081     R (*get_function())() {
00082         return *reinterpret_cast<R (**)()>(this);
00083     }
00084 
00085     R call() const {
00086         if (!Callback<R()>::operator bool()) {
00087             return (R)0;
00088         }
00089 
00090         return Callback<R()>::call();
00091     }
00092 
00093     R operator()() const {
00094         return Callback<R()>::call();
00095     }
00096 };
00097 
00098 typedef FunctionPointerArg1<void, void> FunctionPointer;
00099 
00100 
00101 } // namespace mbed
00102 
00103 #endif