//
//  Mach7: Pattern Matching Library for C++
//
//  Copyright 2011-2013, Texas A&M University.
//  Copyright 2014 Yuriy Solodkyy.
//  All rights reserved.
//
//  Redistribution and use in source and binary forms, with or without
//  modification, are permitted provided that the following conditions are met:
//
//      * Redistributions of source code must retain the above copyright
//        notice, this list of conditions and the following disclaimer.
//
//      * Redistributions in binary form 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.
//
//      * Neither the names of Mach7 project nor the names of its contributors
//        may be used to endorse or promote products derived from this software
//        without specific prior written permission.
//
//  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
//  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
//  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
//  IN NO EVENT SHALL THE COPYRIGHT HOLDERS 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.

///
/// \file
///
/// This file is a part of Mach7 library.
///
/// \author Yuriy Solodkyy <yuriy.solodkyy@gmail.com>
///
/// \see https://parasol.tamu.edu/mach7/
/// \see https://github.com/solodon4/Mach7
/// \see https://github.com/solodon4/SELL
///

#if !defined (FOR_EACH_N)
#error You have to define macro FOR_EACH_N(N)
#endif

#if !defined (FOR_EACH_MAX)
#error You have to define macro FOR_EACH_MAX to be the last iteration number
#endif

#if defined (FOR_EACH_PRELUDE)
FOR_EACH_PRELUDE
#endif

#if FOR_EACH_MAX >= 0
FOR_EACH_N(0)
#endif
#if FOR_EACH_MAX >= 1
FOR_EACH_N(1)
#endif
#if FOR_EACH_MAX >= 2
FOR_EACH_N(2)
#endif
#if FOR_EACH_MAX >= 3
FOR_EACH_N(3)
#endif
#if FOR_EACH_MAX >= 4
FOR_EACH_N(4)
#endif
#if FOR_EACH_MAX >= 5
FOR_EACH_N(5)
#endif
#if FOR_EACH_MAX >= 6
FOR_EACH_N(6)
#endif
#if FOR_EACH_MAX >= 7
FOR_EACH_N(7)
#endif
#if FOR_EACH_MAX >= 8
FOR_EACH_N(8)
#endif
#if FOR_EACH_MAX >= 9
FOR_EACH_N(9)
#endif
#if FOR_EACH_MAX >= 10
FOR_EACH_N(10)
#endif
#if FOR_EACH_MAX >= 11
FOR_EACH_N(11)
#endif
#if FOR_EACH_MAX >= 12
FOR_EACH_N(12)
#endif
#if FOR_EACH_MAX >= 13
FOR_EACH_N(13)
#endif
#if FOR_EACH_MAX >= 14
FOR_EACH_N(14)
#endif
#if FOR_EACH_MAX >= 15
FOR_EACH_N(15)
#endif
#if FOR_EACH_MAX >= 16
FOR_EACH_N(16)
#endif
#if FOR_EACH_MAX >= 17
FOR_EACH_N(17)
#endif
#if FOR_EACH_MAX >= 18
FOR_EACH_N(18)
#endif
#if FOR_EACH_MAX >= 19
FOR_EACH_N(19)
#endif
#if FOR_EACH_MAX >= 20
FOR_EACH_N(20)
#endif
#if FOR_EACH_MAX >= 21
FOR_EACH_N(21)
#endif
#if FOR_EACH_MAX >= 22
FOR_EACH_N(22)
#endif
#if FOR_EACH_MAX >= 23
FOR_EACH_N(23)
#endif
#if FOR_EACH_MAX >= 24
FOR_EACH_N(24)
#endif
#if FOR_EACH_MAX >= 25
FOR_EACH_N(25)
#endif
#if FOR_EACH_MAX >= 26
FOR_EACH_N(26)
#endif
#if FOR_EACH_MAX >= 27
FOR_EACH_N(27)
#endif
#if FOR_EACH_MAX >= 28
FOR_EACH_N(28)
#endif
#if FOR_EACH_MAX >= 29
FOR_EACH_N(29)
#endif
#if FOR_EACH_MAX >= 30
FOR_EACH_N(30)
#endif
#if FOR_EACH_MAX >= 31
FOR_EACH_N(31)
#endif
#if FOR_EACH_MAX >= 32
FOR_EACH_N(32)
#endif
#if FOR_EACH_MAX >= 33
FOR_EACH_N(33)
#endif
#if FOR_EACH_MAX >= 34
FOR_EACH_N(34)
#endif
#if FOR_EACH_MAX >= 35
FOR_EACH_N(35)
#endif
#if FOR_EACH_MAX >= 36
FOR_EACH_N(36)
#endif
#if FOR_EACH_MAX >= 37
FOR_EACH_N(37)
#endif
#if FOR_EACH_MAX >= 38
FOR_EACH_N(38)
#endif
#if FOR_EACH_MAX >= 39
FOR_EACH_N(39)
#endif
#if FOR_EACH_MAX >= 40
FOR_EACH_N(40)
#endif
#if FOR_EACH_MAX >= 41
FOR_EACH_N(41)
#endif
#if FOR_EACH_MAX >= 42
FOR_EACH_N(42)
#endif
#if FOR_EACH_MAX >= 43
FOR_EACH_N(43)
#endif
#if FOR_EACH_MAX >= 44
FOR_EACH_N(44)
#endif
#if FOR_EACH_MAX >= 45
FOR_EACH_N(45)
#endif
#if FOR_EACH_MAX >= 46
FOR_EACH_N(46)
#endif
#if FOR_EACH_MAX >= 47
FOR_EACH_N(47)
#endif
#if FOR_EACH_MAX >= 48
FOR_EACH_N(48)
#endif
#if FOR_EACH_MAX >= 49
FOR_EACH_N(49)
#endif
#if FOR_EACH_MAX >= 50
FOR_EACH_N(50)
#endif
#if FOR_EACH_MAX >= 51
FOR_EACH_N(51)
#endif
#if FOR_EACH_MAX >= 52
FOR_EACH_N(52)
#endif
#if FOR_EACH_MAX >= 53
FOR_EACH_N(53)
#endif
#if FOR_EACH_MAX >= 54
FOR_EACH_N(54)
#endif
#if FOR_EACH_MAX >= 55
FOR_EACH_N(55)
#endif
#if FOR_EACH_MAX >= 56
FOR_EACH_N(56)
#endif
#if FOR_EACH_MAX >= 57
FOR_EACH_N(57)
#endif
#if FOR_EACH_MAX >= 58
FOR_EACH_N(58)
#endif
#if FOR_EACH_MAX >= 59
FOR_EACH_N(59)
#endif
#if FOR_EACH_MAX >= 60
FOR_EACH_N(60)
#endif
#if FOR_EACH_MAX >= 61
FOR_EACH_N(61)
#endif
#if FOR_EACH_MAX >= 62
FOR_EACH_N(62)
#endif
#if FOR_EACH_MAX >= 63
FOR_EACH_N(63)
#endif
#if FOR_EACH_MAX >= 64
FOR_EACH_N(64)
#endif
#if FOR_EACH_MAX >= 65
FOR_EACH_N(65)
#endif
#if FOR_EACH_MAX >= 66
FOR_EACH_N(66)
#endif
#if FOR_EACH_MAX >= 67
FOR_EACH_N(67)
#endif
#if FOR_EACH_MAX >= 68
FOR_EACH_N(68)
#endif
#if FOR_EACH_MAX >= 69
FOR_EACH_N(69)
#endif
#if FOR_EACH_MAX >= 70
FOR_EACH_N(70)
#endif
#if FOR_EACH_MAX >= 71
FOR_EACH_N(71)
#endif
#if FOR_EACH_MAX >= 72
FOR_EACH_N(72)
#endif
#if FOR_EACH_MAX >= 73
FOR_EACH_N(73)
#endif
#if FOR_EACH_MAX >= 74
FOR_EACH_N(74)
#endif
#if FOR_EACH_MAX >= 75
FOR_EACH_N(75)
#endif
#if FOR_EACH_MAX >= 76
FOR_EACH_N(76)
#endif
#if FOR_EACH_MAX >= 77
FOR_EACH_N(77)
#endif
#if FOR_EACH_MAX >= 78
FOR_EACH_N(78)
#endif
#if FOR_EACH_MAX >= 79
FOR_EACH_N(79)
#endif
#if FOR_EACH_MAX >= 80
FOR_EACH_N(80)
#endif
#if FOR_EACH_MAX >= 81
FOR_EACH_N(81)
#endif
#if FOR_EACH_MAX >= 82
FOR_EACH_N(82)
#endif
#if FOR_EACH_MAX >= 83
FOR_EACH_N(83)
#endif
#if FOR_EACH_MAX >= 84
FOR_EACH_N(84)
#endif
#if FOR_EACH_MAX >= 85
FOR_EACH_N(85)
#endif
#if FOR_EACH_MAX >= 86
FOR_EACH_N(86)
#endif
#if FOR_EACH_MAX >= 87
FOR_EACH_N(87)
#endif
#if FOR_EACH_MAX >= 88
FOR_EACH_N(88)
#endif
#if FOR_EACH_MAX >= 89
FOR_EACH_N(89)
#endif
#if FOR_EACH_MAX >= 90
FOR_EACH_N(90)
#endif
#if FOR_EACH_MAX >= 91
FOR_EACH_N(91)
#endif
#if FOR_EACH_MAX >= 92
FOR_EACH_N(92)
#endif
#if FOR_EACH_MAX >= 93
FOR_EACH_N(93)
#endif
#if FOR_EACH_MAX >= 94
FOR_EACH_N(94)
#endif
#if FOR_EACH_MAX >= 95
FOR_EACH_N(95)
#endif
#if FOR_EACH_MAX >= 96
FOR_EACH_N(96)
#endif
#if FOR_EACH_MAX >= 97
FOR_EACH_N(97)
#endif
#if FOR_EACH_MAX >= 98
FOR_EACH_N(98)
#endif
#if FOR_EACH_MAX >= 99
FOR_EACH_N(99)
#endif

#if defined (FOR_EACH_POSTLUDE)
FOR_EACH_POSTLUDE
#endif
