Kenji Arai / TYBLE16_mbedlized_os5_several_examples_1st

Dependencies:   nRF51_Vdd TextLCD BME280

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