1*1b2596b5SMatthias Ringwald /** 2*1b2596b5SMatthias Ringwald * \file 3*1b2596b5SMatthias Ringwald * 4*1b2596b5SMatthias Ringwald * \brief Preprocessor token pasting utils. 5*1b2596b5SMatthias Ringwald * 6*1b2596b5SMatthias Ringwald * Copyright (c) 2010-2015 Atmel Corporation. All rights reserved. 7*1b2596b5SMatthias Ringwald * 8*1b2596b5SMatthias Ringwald * \asf_license_start 9*1b2596b5SMatthias Ringwald * 10*1b2596b5SMatthias Ringwald * \page License 11*1b2596b5SMatthias Ringwald * 12*1b2596b5SMatthias Ringwald * Redistribution and use in source and binary forms, with or without 13*1b2596b5SMatthias Ringwald * modification, are permitted provided that the following conditions are met: 14*1b2596b5SMatthias Ringwald * 15*1b2596b5SMatthias Ringwald * 1. Redistributions of source code must retain the above copyright notice, 16*1b2596b5SMatthias Ringwald * this list of conditions and the following disclaimer. 17*1b2596b5SMatthias Ringwald * 18*1b2596b5SMatthias Ringwald * 2. Redistributions in binary form must reproduce the above copyright notice, 19*1b2596b5SMatthias Ringwald * this list of conditions and the following disclaimer in the documentation 20*1b2596b5SMatthias Ringwald * and/or other materials provided with the distribution. 21*1b2596b5SMatthias Ringwald * 22*1b2596b5SMatthias Ringwald * 3. The name of Atmel may not be used to endorse or promote products derived 23*1b2596b5SMatthias Ringwald * from this software without specific prior written permission. 24*1b2596b5SMatthias Ringwald * 25*1b2596b5SMatthias Ringwald * 4. This software may only be redistributed and used in connection with an 26*1b2596b5SMatthias Ringwald * Atmel microcontroller product. 27*1b2596b5SMatthias Ringwald * 28*1b2596b5SMatthias Ringwald * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED 29*1b2596b5SMatthias Ringwald * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 30*1b2596b5SMatthias Ringwald * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE 31*1b2596b5SMatthias Ringwald * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR 32*1b2596b5SMatthias Ringwald * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 33*1b2596b5SMatthias Ringwald * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 34*1b2596b5SMatthias Ringwald * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 35*1b2596b5SMatthias Ringwald * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 36*1b2596b5SMatthias Ringwald * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 37*1b2596b5SMatthias Ringwald * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 38*1b2596b5SMatthias Ringwald * POSSIBILITY OF SUCH DAMAGE. 39*1b2596b5SMatthias Ringwald * 40*1b2596b5SMatthias Ringwald * \asf_license_stop 41*1b2596b5SMatthias Ringwald * 42*1b2596b5SMatthias Ringwald */ 43*1b2596b5SMatthias Ringwald /* 44*1b2596b5SMatthias Ringwald * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a> 45*1b2596b5SMatthias Ringwald */ 46*1b2596b5SMatthias Ringwald 47*1b2596b5SMatthias Ringwald #ifndef _TPASTE_H_ 48*1b2596b5SMatthias Ringwald #define _TPASTE_H_ 49*1b2596b5SMatthias Ringwald 50*1b2596b5SMatthias Ringwald /** 51*1b2596b5SMatthias Ringwald * \defgroup group_sam_utils_tpaste Preprocessor - Token Paste 52*1b2596b5SMatthias Ringwald * 53*1b2596b5SMatthias Ringwald * \ingroup group_sam_utils 54*1b2596b5SMatthias Ringwald * 55*1b2596b5SMatthias Ringwald * \{ 56*1b2596b5SMatthias Ringwald */ 57*1b2596b5SMatthias Ringwald 58*1b2596b5SMatthias Ringwald /*! \name Token Paste 59*1b2596b5SMatthias Ringwald * 60*1b2596b5SMatthias Ringwald * Paste N preprocessing tokens together, these tokens being allowed to be \#defined. 61*1b2596b5SMatthias Ringwald * 62*1b2596b5SMatthias Ringwald * May be used only within macros with the tokens passed as arguments if the tokens are \#defined. 63*1b2596b5SMatthias Ringwald * 64*1b2596b5SMatthias Ringwald * For example, writing TPASTE2(U, WIDTH) within a macro \#defined by 65*1b2596b5SMatthias Ringwald * UTYPE(WIDTH) and invoked as UTYPE(UL_WIDTH) with UL_WIDTH \#defined as 32 is 66*1b2596b5SMatthias Ringwald * equivalent to writing U32. 67*1b2596b5SMatthias Ringwald */ 68*1b2596b5SMatthias Ringwald //! @{ 69*1b2596b5SMatthias Ringwald #define TPASTE2( a, b) a##b 70*1b2596b5SMatthias Ringwald #define TPASTE3( a, b, c) a##b##c 71*1b2596b5SMatthias Ringwald #define TPASTE4( a, b, c, d) a##b##c##d 72*1b2596b5SMatthias Ringwald #define TPASTE5( a, b, c, d, e) a##b##c##d##e 73*1b2596b5SMatthias Ringwald #define TPASTE6( a, b, c, d, e, f) a##b##c##d##e##f 74*1b2596b5SMatthias Ringwald #define TPASTE7( a, b, c, d, e, f, g) a##b##c##d##e##f##g 75*1b2596b5SMatthias Ringwald #define TPASTE8( a, b, c, d, e, f, g, h) a##b##c##d##e##f##g##h 76*1b2596b5SMatthias Ringwald #define TPASTE9( a, b, c, d, e, f, g, h, i) a##b##c##d##e##f##g##h##i 77*1b2596b5SMatthias Ringwald #define TPASTE10(a, b, c, d, e, f, g, h, i, j) a##b##c##d##e##f##g##h##i##j 78*1b2596b5SMatthias Ringwald //! @} 79*1b2596b5SMatthias Ringwald 80*1b2596b5SMatthias Ringwald /*! \name Absolute Token Paste 81*1b2596b5SMatthias Ringwald * 82*1b2596b5SMatthias Ringwald * Paste N preprocessing tokens together, these tokens being allowed to be \#defined. 83*1b2596b5SMatthias Ringwald * 84*1b2596b5SMatthias Ringwald * No restriction of use if the tokens are \#defined. 85*1b2596b5SMatthias Ringwald * 86*1b2596b5SMatthias Ringwald * For example, writing ATPASTE2(U, UL_WIDTH) anywhere with UL_WIDTH \#defined 87*1b2596b5SMatthias Ringwald * as 32 is equivalent to writing U32. 88*1b2596b5SMatthias Ringwald */ 89*1b2596b5SMatthias Ringwald //! @{ 90*1b2596b5SMatthias Ringwald #define ATPASTE2( a, b) TPASTE2( a, b) 91*1b2596b5SMatthias Ringwald #define ATPASTE3( a, b, c) TPASTE3( a, b, c) 92*1b2596b5SMatthias Ringwald #define ATPASTE4( a, b, c, d) TPASTE4( a, b, c, d) 93*1b2596b5SMatthias Ringwald #define ATPASTE5( a, b, c, d, e) TPASTE5( a, b, c, d, e) 94*1b2596b5SMatthias Ringwald #define ATPASTE6( a, b, c, d, e, f) TPASTE6( a, b, c, d, e, f) 95*1b2596b5SMatthias Ringwald #define ATPASTE7( a, b, c, d, e, f, g) TPASTE7( a, b, c, d, e, f, g) 96*1b2596b5SMatthias Ringwald #define ATPASTE8( a, b, c, d, e, f, g, h) TPASTE8( a, b, c, d, e, f, g, h) 97*1b2596b5SMatthias Ringwald #define ATPASTE9( a, b, c, d, e, f, g, h, i) TPASTE9( a, b, c, d, e, f, g, h, i) 98*1b2596b5SMatthias Ringwald #define ATPASTE10(a, b, c, d, e, f, g, h, i, j) TPASTE10(a, b, c, d, e, f, g, h, i, j) 99*1b2596b5SMatthias Ringwald //! @} 100*1b2596b5SMatthias Ringwald 101*1b2596b5SMatthias Ringwald /** 102*1b2596b5SMatthias Ringwald * \} 103*1b2596b5SMatthias Ringwald */ 104*1b2596b5SMatthias Ringwald 105*1b2596b5SMatthias Ringwald #endif // _TPASTE_H_ 106