Describes predefine macros for mbed online compiler (armcc)

Committer:
MACRUM
Date:
Thu Mar 16 21:58:09 2017 +0900
Revision:
6:40e873bbc5f7
Add licence header info

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MACRUM 6:40e873bbc5f7 1 /* mbed Microcontroller Library
MACRUM 6:40e873bbc5f7 2 * Copyright (c) 2006-2013 ARM Limited
MACRUM 6:40e873bbc5f7 3 *
MACRUM 6:40e873bbc5f7 4 * Licensed under the Apache License, Version 2.0 (the "License");
MACRUM 6:40e873bbc5f7 5 * you may not use this file except in compliance with the License.
MACRUM 6:40e873bbc5f7 6 * You may obtain a copy of the License at
MACRUM 6:40e873bbc5f7 7 *
MACRUM 6:40e873bbc5f7 8 * http://www.apache.org/licenses/LICENSE-2.0
MACRUM 6:40e873bbc5f7 9 *
MACRUM 6:40e873bbc5f7 10 * Unless required by applicable law or agreed to in writing, software
MACRUM 6:40e873bbc5f7 11 * distributed under the License is distributed on an "AS IS" BASIS,
MACRUM 6:40e873bbc5f7 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
MACRUM 6:40e873bbc5f7 13 * See the License for the specific language governing permissions and
MACRUM 6:40e873bbc5f7 14 * limitations under the License.
MACRUM 6:40e873bbc5f7 15 */
MACRUM 6:40e873bbc5f7 16 #ifndef MBED_CALLCHAIN_H
MACRUM 6:40e873bbc5f7 17 #define MBED_CALLCHAIN_H
MACRUM 6:40e873bbc5f7 18
MACRUM 6:40e873bbc5f7 19 #include "platform/Callback.h"
MACRUM 6:40e873bbc5f7 20 #include "platform/mbed_toolchain.h"
MACRUM 6:40e873bbc5f7 21 #include <string.h>
MACRUM 6:40e873bbc5f7 22
MACRUM 6:40e873bbc5f7 23 namespace mbed {
MACRUM 6:40e873bbc5f7 24 /** \addtogroup platform */
MACRUM 6:40e873bbc5f7 25 /** @{*/
MACRUM 6:40e873bbc5f7 26
MACRUM 6:40e873bbc5f7 27 /** Group one or more functions in an instance of a CallChain, then call them in
MACRUM 6:40e873bbc5f7 28 * sequence using CallChain::call(). Used mostly by the interrupt chaining code,
MACRUM 6:40e873bbc5f7 29 * but can be used for other purposes.
MACRUM 6:40e873bbc5f7 30 *
MACRUM 6:40e873bbc5f7 31 * @Note Synchronization level: Not protected
MACRUM 6:40e873bbc5f7 32 *
MACRUM 6:40e873bbc5f7 33 * Example:
MACRUM 6:40e873bbc5f7 34 * @code
MACRUM 6:40e873bbc5f7 35 * #include "mbed.h"
MACRUM 6:40e873bbc5f7 36 *
MACRUM 6:40e873bbc5f7 37 * CallChain chain;
MACRUM 6:40e873bbc5f7 38 *
MACRUM 6:40e873bbc5f7 39 * void first(void) {
MACRUM 6:40e873bbc5f7 40 * printf("'first' function.\n");
MACRUM 6:40e873bbc5f7 41 * }
MACRUM 6:40e873bbc5f7 42 *
MACRUM 6:40e873bbc5f7 43 * void second(void) {
MACRUM 6:40e873bbc5f7 44 * printf("'second' function.\n");
MACRUM 6:40e873bbc5f7 45 * }
MACRUM 6:40e873bbc5f7 46 *
MACRUM 6:40e873bbc5f7 47 * class Test {
MACRUM 6:40e873bbc5f7 48 * public:
MACRUM 6:40e873bbc5f7 49 * void f(void) {
MACRUM 6:40e873bbc5f7 50 * printf("A::f (class member).\n");
MACRUM 6:40e873bbc5f7 51 * }
MACRUM 6:40e873bbc5f7 52 * };
MACRUM 6:40e873bbc5f7 53 *
MACRUM 6:40e873bbc5f7 54 * int main() {
MACRUM 6:40e873bbc5f7 55 * Test test;
MACRUM 6:40e873bbc5f7 56 *
MACRUM 6:40e873bbc5f7 57 * chain.add(second);
MACRUM 6:40e873bbc5f7 58 * chain.add_front(first);
MACRUM 6:40e873bbc5f7 59 * chain.add(&test, &Test::f);
MACRUM 6:40e873bbc5f7 60 * chain.call();
MACRUM 6:40e873bbc5f7 61 * }
MACRUM 6:40e873bbc5f7 62 * @endcode
MACRUM 6:40e873bbc5f7 63 */
MACRUM 6:40e873bbc5f7 64
MACRUM 6:40e873bbc5f7 65 typedef Callback<void()> *pFunctionPointer_t;
MACRUM 6:40e873bbc5f7 66 class CallChainLink;
MACRUM 6:40e873bbc5f7 67
MACRUM 6:40e873bbc5f7 68 class CallChain {
MACRUM 6:40e873bbc5f7 69 public:
MACRUM 6:40e873bbc5f7 70 /** Create an empty chain
MACRUM 6:40e873bbc5f7 71 *
MACRUM 6:40e873bbc5f7 72 * @param size (optional) Initial size of the chain
MACRUM 6:40e873bbc5f7 73 */
MACRUM 6:40e873bbc5f7 74 CallChain(int size = 4);
MACRUM 6:40e873bbc5f7 75 virtual ~CallChain();
MACRUM 6:40e873bbc5f7 76
MACRUM 6:40e873bbc5f7 77 /** Add a function at the end of the chain
MACRUM 6:40e873bbc5f7 78 *
MACRUM 6:40e873bbc5f7 79 * @param func A pointer to a void function
MACRUM 6:40e873bbc5f7 80 *
MACRUM 6:40e873bbc5f7 81 * @returns
MACRUM 6:40e873bbc5f7 82 * The function object created for 'func'
MACRUM 6:40e873bbc5f7 83 */
MACRUM 6:40e873bbc5f7 84 pFunctionPointer_t add(Callback<void()> func);
MACRUM 6:40e873bbc5f7 85
MACRUM 6:40e873bbc5f7 86 /** Add a function at the end of the chain
MACRUM 6:40e873bbc5f7 87 *
MACRUM 6:40e873bbc5f7 88 * @param obj pointer to the object to call the member function on
MACRUM 6:40e873bbc5f7 89 * @param method pointer to the member function to be called
MACRUM 6:40e873bbc5f7 90 *
MACRUM 6:40e873bbc5f7 91 * @returns
MACRUM 6:40e873bbc5f7 92 * The function object created for 'obj' and 'method'
MACRUM 6:40e873bbc5f7 93 *
MACRUM 6:40e873bbc5f7 94 * @deprecated
MACRUM 6:40e873bbc5f7 95 * The add function does not support cv-qualifiers. Replaced by
MACRUM 6:40e873bbc5f7 96 * add(callback(obj, method)).
MACRUM 6:40e873bbc5f7 97 */
MACRUM 6:40e873bbc5f7 98 template<typename T, typename M>
MACRUM 6:40e873bbc5f7 99 MBED_DEPRECATED_SINCE("mbed-os-5.1",
MACRUM 6:40e873bbc5f7 100 "The add function does not support cv-qualifiers. Replaced by "
MACRUM 6:40e873bbc5f7 101 "add(callback(obj, method)).")
MACRUM 6:40e873bbc5f7 102 pFunctionPointer_t add(T *obj, M method) {
MACRUM 6:40e873bbc5f7 103 return add(callback(obj, method));
MACRUM 6:40e873bbc5f7 104 }
MACRUM 6:40e873bbc5f7 105
MACRUM 6:40e873bbc5f7 106 /** Add a function at the beginning of the chain
MACRUM 6:40e873bbc5f7 107 *
MACRUM 6:40e873bbc5f7 108 * @param func A pointer to a void function
MACRUM 6:40e873bbc5f7 109 *
MACRUM 6:40e873bbc5f7 110 * @returns
MACRUM 6:40e873bbc5f7 111 * The function object created for 'func'
MACRUM 6:40e873bbc5f7 112 */
MACRUM 6:40e873bbc5f7 113 pFunctionPointer_t add_front(Callback<void()> func);
MACRUM 6:40e873bbc5f7 114
MACRUM 6:40e873bbc5f7 115 /** Add a function at the beginning of the chain
MACRUM 6:40e873bbc5f7 116 *
MACRUM 6:40e873bbc5f7 117 * @param tptr pointer to the object to call the member function on
MACRUM 6:40e873bbc5f7 118 * @param mptr pointer to the member function to be called
MACRUM 6:40e873bbc5f7 119 *
MACRUM 6:40e873bbc5f7 120 * @returns
MACRUM 6:40e873bbc5f7 121 * The function object created for 'tptr' and 'mptr'
MACRUM 6:40e873bbc5f7 122 *
MACRUM 6:40e873bbc5f7 123 * @deprecated
MACRUM 6:40e873bbc5f7 124 * The add_front function does not support cv-qualifiers. Replaced by
MACRUM 6:40e873bbc5f7 125 * add_front(callback(obj, method)).
MACRUM 6:40e873bbc5f7 126 */
MACRUM 6:40e873bbc5f7 127 template<typename T, typename M>
MACRUM 6:40e873bbc5f7 128 MBED_DEPRECATED_SINCE("mbed-os-5.1",
MACRUM 6:40e873bbc5f7 129 "The add_front function does not support cv-qualifiers. Replaced by "
MACRUM 6:40e873bbc5f7 130 "add_front(callback(obj, method)).")
MACRUM 6:40e873bbc5f7 131 pFunctionPointer_t add_front(T *obj, M method) {
MACRUM 6:40e873bbc5f7 132 return add_front(callback(obj, method));
MACRUM 6:40e873bbc5f7 133 }
MACRUM 6:40e873bbc5f7 134
MACRUM 6:40e873bbc5f7 135 /** Get the number of functions in the chain
MACRUM 6:40e873bbc5f7 136 */
MACRUM 6:40e873bbc5f7 137 int size() const;
MACRUM 6:40e873bbc5f7 138
MACRUM 6:40e873bbc5f7 139 /** Get a function object from the chain
MACRUM 6:40e873bbc5f7 140 *
MACRUM 6:40e873bbc5f7 141 * @param i function object index
MACRUM 6:40e873bbc5f7 142 *
MACRUM 6:40e873bbc5f7 143 * @returns
MACRUM 6:40e873bbc5f7 144 * The function object at position 'i' in the chain
MACRUM 6:40e873bbc5f7 145 */
MACRUM 6:40e873bbc5f7 146 pFunctionPointer_t get(int i) const;
MACRUM 6:40e873bbc5f7 147
MACRUM 6:40e873bbc5f7 148 /** Look for a function object in the call chain
MACRUM 6:40e873bbc5f7 149 *
MACRUM 6:40e873bbc5f7 150 * @param f the function object to search
MACRUM 6:40e873bbc5f7 151 *
MACRUM 6:40e873bbc5f7 152 * @returns
MACRUM 6:40e873bbc5f7 153 * The index of the function object if found, -1 otherwise.
MACRUM 6:40e873bbc5f7 154 */
MACRUM 6:40e873bbc5f7 155 int find(pFunctionPointer_t f) const;
MACRUM 6:40e873bbc5f7 156
MACRUM 6:40e873bbc5f7 157 /** Clear the call chain (remove all functions in the chain).
MACRUM 6:40e873bbc5f7 158 */
MACRUM 6:40e873bbc5f7 159 void clear();
MACRUM 6:40e873bbc5f7 160
MACRUM 6:40e873bbc5f7 161 /** Remove a function object from the chain
MACRUM 6:40e873bbc5f7 162 *
MACRUM 6:40e873bbc5f7 163 * @arg f the function object to remove
MACRUM 6:40e873bbc5f7 164 *
MACRUM 6:40e873bbc5f7 165 * @returns
MACRUM 6:40e873bbc5f7 166 * true if the function object was found and removed, false otherwise.
MACRUM 6:40e873bbc5f7 167 */
MACRUM 6:40e873bbc5f7 168 bool remove(pFunctionPointer_t f);
MACRUM 6:40e873bbc5f7 169
MACRUM 6:40e873bbc5f7 170 /** Call all the functions in the chain in sequence
MACRUM 6:40e873bbc5f7 171 */
MACRUM 6:40e873bbc5f7 172 void call();
MACRUM 6:40e873bbc5f7 173
MACRUM 6:40e873bbc5f7 174 void operator ()(void) {
MACRUM 6:40e873bbc5f7 175 call();
MACRUM 6:40e873bbc5f7 176 }
MACRUM 6:40e873bbc5f7 177 pFunctionPointer_t operator [](int i) const {
MACRUM 6:40e873bbc5f7 178 return get(i);
MACRUM 6:40e873bbc5f7 179 }
MACRUM 6:40e873bbc5f7 180
MACRUM 6:40e873bbc5f7 181 /* disallow copy constructor and assignment operators */
MACRUM 6:40e873bbc5f7 182 private:
MACRUM 6:40e873bbc5f7 183 CallChain(const CallChain&);
MACRUM 6:40e873bbc5f7 184 CallChain & operator = (const CallChain&);
MACRUM 6:40e873bbc5f7 185 CallChainLink *_chain;
MACRUM 6:40e873bbc5f7 186 };
MACRUM 6:40e873bbc5f7 187
MACRUM 6:40e873bbc5f7 188 } // namespace mbed
MACRUM 6:40e873bbc5f7 189
MACRUM 6:40e873bbc5f7 190 #endif
MACRUM 6:40e873bbc5f7 191
MACRUM 6:40e873bbc5f7 192 /** @}*/