| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 | 
							- /**
 
-  * Copyright (c) 2016 - 2020, Nordic Semiconductor ASA
 
-  *
 
-  * All rights reserved.
 
-  *
 
-  * Redistribution and use in source and binary forms, with or without modification,
 
-  * are permitted provided that the following conditions are met:
 
-  *
 
-  * 1. Redistributions of source code must retain the above copyright notice, this
 
-  *    list of conditions and the following disclaimer.
 
-  *
 
-  * 2. Redistributions in binary form, except as embedded into a Nordic
 
-  *    Semiconductor ASA integrated circuit in a product or a software update for
 
-  *    such product, must reproduce the above copyright notice, this list of
 
-  *    conditions and the following disclaimer in the documentation and/or other
 
-  *    materials provided with the distribution.
 
-  *
 
-  * 3. Neither the name of Nordic Semiconductor ASA nor the names of its
 
-  *    contributors may be used to endorse or promote products derived from this
 
-  *    software without specific prior written permission.
 
-  *
 
-  * 4. This software, with or without modification, must only be used with a
 
-  *    Nordic Semiconductor ASA integrated circuit.
 
-  *
 
-  * 5. Any software provided in binary form under this license must not be reverse
 
-  *    engineered, decompiled, modified and/or disassembled.
 
-  *
 
-  * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
 
-  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 
-  * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
 
-  * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
 
-  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 
-  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
 
-  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 
-  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 
-  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 
-  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-  *
 
-  */
 
- // See https://github.com/pfultz2/Cloak/wiki/C-Preprocessor-tricks,-tips,-and-idioms
 
- #ifndef ES_UTIL_H__
 
- #define ES_UTIL_H__
 
- #define BOOL(x) COMPL(NOT(x))
 
- #define IF(c) IIF(BOOL(c))
 
- #define CHECK_N(x, n, ...) n
 
- #define CHECK(...) CHECK_N(__VA_ARGS__, 0,)
 
- #define PROBE(x) x, 1,
 
- #define EAT(...)
 
- #define EXPAND(...) __VA_ARGS__
 
- #define WHEN(c) IF(c)(EXPAND, EAT)
 
- #define NOT(x) CHECK(PRIMITIVE_CAT(NOT_, x))
 
- #define NOT_0 PROBE(~)
 
- #define COMPL(b) PRIMITIVE_CAT(COMPL_, b)
 
- #define COMPL_0 1
 
- #define COMPL_1 0
 
- #define CAT(a, ...) PRIMITIVE_CAT(a, __VA_ARGS__)
 
- #define PRIMITIVE_CAT(a, ...) a ## __VA_ARGS__
 
- #define IIF(c) PRIMITIVE_CAT(IIF_, c)
 
- #define IIF_0(t, ...) __VA_ARGS__
 
- #define IIF_1(t, ...) t
 
- #define DEC(x) PRIMITIVE_CAT(DEC_, x)
 
- #define DEC_0   0
 
- #define DEC_1   0
 
- #define DEC_2   1
 
- #define DEC_3   2
 
- #define DEC_4   3
 
- #define DEC_5   4
 
- #define DEC_6   5
 
- #define DEC_7   6
 
- #define DEC_8   7
 
- #define DEC_9   8
 
- #define DEC_10  9
 
- #define DEC_11 10
 
- #define DEC_12 11
 
- #define DEC_13 12
 
- #define DEC_14 13
 
- #define DEC_15 14
 
- #define DEC_16 15
 
- #define DEC_17 16
 
- #define DEC_18 17
 
- #define DEC_19 18
 
- #define DEC_20 19
 
- #define DEC_21 20
 
- #define DEC_22 21
 
- #define DEC_23 22
 
- #define DEC_24 23
 
- #define DEC_25 24
 
- #define DEC_26 25
 
- #define DEC_27 26
 
- #define DEC_28 27
 
- #define DEC_29 28
 
- #define DEC_30 29
 
- #define DEC_31 30
 
- #define DEC_32 31
 
- #define EMPTY()
 
- #define DEFER(id) id EMPTY()
 
- #define OBSTRUCT(...) __VA_ARGS__ DEFER(EMPTY)()
 
- #define EXPAND(...) __VA_ARGS__
 
- #define EVAL(...)  EVAL1(EVAL1(EVAL1(__VA_ARGS__)))
 
- #define EVAL1(...) EVAL2(EVAL2(EVAL2(__VA_ARGS__)))
 
- #define EVAL2(...) EVAL3(EVAL3(EVAL3(__VA_ARGS__)))
 
- #define EVAL3(...) EVAL4(EVAL4(EVAL4(__VA_ARGS__)))
 
- #define EVAL4(...) EVAL5(EVAL5(EVAL5(__VA_ARGS__)))
 
- #define EVAL5(...) __VA_ARGS__
 
- #define REPEAT(count, macro, ...) \
 
-     WHEN(count) \
 
-     ( \
 
-         OBSTRUCT(REPEAT_INDIRECT) () \
 
-         ( \
 
-             DEC(count), macro, __VA_ARGS__ \
 
-         ) \
 
-         OBSTRUCT(macro) \
 
-         ( \
 
-             DEC(count), __VA_ARGS__ \
 
-         ) \
 
-     )
 
- #define REPEAT_INDIRECT() REPEAT
 
- /**
 
-  * @}
 
-  */
 
- #endif // ES_UTIL_H__
 
 
  |