#ifndef BOOST_PREPROCESSOR_REPEAT_HPP
#define BOOST_PREPROCESSOR_REPEAT_HPP

//  Copyright (C) 2001
//  Housemarque, Inc.
//  http://www.housemarque.com
//  
//  Permission to copy, use, modify, sell and distribute this software is
//  granted provided this copyright notice appears in all copies. This
//  software is provided "as is" without express or implied warranty, and
//  with no claim as to its suitability for any purpose.

//  See http://www.boost.org for most recent version.

/*! \file

<a href="../../../../boost/preprocessor/repeat.hpp">Click here to see the header.</a>
*/

//! Repeats the macro M(I,P) for I = 0 to N-1.
/*!
In other words, expands to the sequence:

<PRE>\verbatim
  M(0,P) M(1,P) ... M(N-1,P)
\endverbatim</PRE>

See BOOST_PREPROCESSOR_LIMIT_MAG.

RATIONALE:
- BOOST_PREPROCESSOR_REPEAT, BOOST_PREPROCESSOR_REPEAT_2ND, ... must work together.
- BOOST_PREPROCESSOR_REPEAT is already tested with BOOST_PREPROCESSOR_ENUM_PARAMS.
- The tested repeat count should exceed imaginable usage.
- Testing the generation of is_function_helper()s upto 40 arguments should be
sufficient in this case. Many compilers may fail the repetition tests (at
least with higher counts). However, the primary purpose of the repetition
primitives is to enable configurability with reasonable defaults, and not
necessarily "the most impressive repetition".
*/
#define BOOST_PREPROCESSOR_REPEAT(N,M,P) BOOST_PREPROCESSOR_REPEAT_DELAY(N,M,P)

#ifndef DOXYGEN_SHOULD_SKIP_THIS
#define BOOST_PREPROCESSOR_REPEAT_DELAY(N,M,P) BOOST_PREPROCESSOR_REPEAT##N(M,P)
#define BOOST_PREPROCESSOR_REPEAT0(M,P)
#define BOOST_PREPROCESSOR_REPEAT1(M,P) M(0,P)
#define BOOST_PREPROCESSOR_REPEAT2(M,P) M(0,P) M(1,P)
#define BOOST_PREPROCESSOR_REPEAT3(M,P) BOOST_PREPROCESSOR_REPEAT2(M,P) M(2,P)
#define BOOST_PREPROCESSOR_REPEAT4(M,P) BOOST_PREPROCESSOR_REPEAT3(M,P) M(3,P)
#define BOOST_PREPROCESSOR_REPEAT5(M,P) BOOST_PREPROCESSOR_REPEAT4(M,P) M(4,P)
#define BOOST_PREPROCESSOR_REPEAT6(M,P) BOOST_PREPROCESSOR_REPEAT5(M,P) M(5,P)
#define BOOST_PREPROCESSOR_REPEAT7(M,P) BOOST_PREPROCESSOR_REPEAT6(M,P) M(6,P)
#define BOOST_PREPROCESSOR_REPEAT8(M,P) BOOST_PREPROCESSOR_REPEAT7(M,P) M(7,P)
#define BOOST_PREPROCESSOR_REPEAT9(M,P) BOOST_PREPROCESSOR_REPEAT8(M,P) M(8,P)
#define BOOST_PREPROCESSOR_REPEAT10(M,P) BOOST_PREPROCESSOR_REPEAT9(M,P) M(9,P)
#define BOOST_PREPROCESSOR_REPEAT11(M,P) BOOST_PREPROCESSOR_REPEAT10(M,P) M(10,P)
#define BOOST_PREPROCESSOR_REPEAT12(M,P) BOOST_PREPROCESSOR_REPEAT11(M,P) M(11,P)
#define BOOST_PREPROCESSOR_REPEAT13(M,P) BOOST_PREPROCESSOR_REPEAT12(M,P) M(12,P)
#define BOOST_PREPROCESSOR_REPEAT14(M,P) BOOST_PREPROCESSOR_REPEAT13(M,P) M(13,P)
#define BOOST_PREPROCESSOR_REPEAT15(M,P) BOOST_PREPROCESSOR_REPEAT14(M,P) M(14,P)
#define BOOST_PREPROCESSOR_REPEAT16(M,P) BOOST_PREPROCESSOR_REPEAT15(M,P) M(15,P)
#define BOOST_PREPROCESSOR_REPEAT17(M,P) BOOST_PREPROCESSOR_REPEAT16(M,P) M(16,P)
#define BOOST_PREPROCESSOR_REPEAT18(M,P) BOOST_PREPROCESSOR_REPEAT17(M,P) M(17,P)
#define BOOST_PREPROCESSOR_REPEAT19(M,P) BOOST_PREPROCESSOR_REPEAT18(M,P) M(18,P)
#define BOOST_PREPROCESSOR_REPEAT20(M,P) BOOST_PREPROCESSOR_REPEAT19(M,P) M(19,P)
#define BOOST_PREPROCESSOR_REPEAT21(M,P) BOOST_PREPROCESSOR_REPEAT20(M,P) M(20,P)
#define BOOST_PREPROCESSOR_REPEAT22(M,P) BOOST_PREPROCESSOR_REPEAT21(M,P) M(21,P)
#define BOOST_PREPROCESSOR_REPEAT23(M,P) BOOST_PREPROCESSOR_REPEAT22(M,P) M(22,P)
#define BOOST_PREPROCESSOR_REPEAT24(M,P) BOOST_PREPROCESSOR_REPEAT23(M,P) M(23,P)
#define BOOST_PREPROCESSOR_REPEAT25(M,P) BOOST_PREPROCESSOR_REPEAT24(M,P) M(24,P)
#define BOOST_PREPROCESSOR_REPEAT26(M,P) BOOST_PREPROCESSOR_REPEAT25(M,P) M(25,P)
#define BOOST_PREPROCESSOR_REPEAT27(M,P) BOOST_PREPROCESSOR_REPEAT26(M,P) M(26,P)
#define BOOST_PREPROCESSOR_REPEAT28(M,P) BOOST_PREPROCESSOR_REPEAT27(M,P) M(27,P)
#define BOOST_PREPROCESSOR_REPEAT29(M,P) BOOST_PREPROCESSOR_REPEAT28(M,P) M(28,P)
#define BOOST_PREPROCESSOR_REPEAT30(M,P) BOOST_PREPROCESSOR_REPEAT29(M,P) M(29,P)
#define BOOST_PREPROCESSOR_REPEAT31(M,P) BOOST_PREPROCESSOR_REPEAT30(M,P) M(30,P)
#define BOOST_PREPROCESSOR_REPEAT32(M,P) BOOST_PREPROCESSOR_REPEAT31(M,P) M(31,P)
#define BOOST_PREPROCESSOR_REPEAT33(M,P) BOOST_PREPROCESSOR_REPEAT32(M,P) M(32,P)
#define BOOST_PREPROCESSOR_REPEAT34(M,P) BOOST_PREPROCESSOR_REPEAT33(M,P) M(33,P)
#define BOOST_PREPROCESSOR_REPEAT35(M,P) BOOST_PREPROCESSOR_REPEAT34(M,P) M(34,P)
#define BOOST_PREPROCESSOR_REPEAT36(M,P) BOOST_PREPROCESSOR_REPEAT35(M,P) M(35,P)
#define BOOST_PREPROCESSOR_REPEAT37(M,P) BOOST_PREPROCESSOR_REPEAT36(M,P) M(36,P)
#define BOOST_PREPROCESSOR_REPEAT38(M,P) BOOST_PREPROCESSOR_REPEAT37(M,P) M(37,P)
#define BOOST_PREPROCESSOR_REPEAT39(M,P) BOOST_PREPROCESSOR_REPEAT38(M,P) M(38,P)
#define BOOST_PREPROCESSOR_REPEAT40(M,P) BOOST_PREPROCESSOR_REPEAT39(M,P) M(39,P)
#define BOOST_PREPROCESSOR_REPEAT41(M,P) BOOST_PREPROCESSOR_REPEAT40(M,P) M(40,P)
#define BOOST_PREPROCESSOR_REPEAT42(M,P) BOOST_PREPROCESSOR_REPEAT41(M,P) M(41,P)
#define BOOST_PREPROCESSOR_REPEAT43(M,P) BOOST_PREPROCESSOR_REPEAT42(M,P) M(42,P)
#define BOOST_PREPROCESSOR_REPEAT44(M,P) BOOST_PREPROCESSOR_REPEAT43(M,P) M(43,P)
#define BOOST_PREPROCESSOR_REPEAT45(M,P) BOOST_PREPROCESSOR_REPEAT44(M,P) M(44,P)
#define BOOST_PREPROCESSOR_REPEAT46(M,P) BOOST_PREPROCESSOR_REPEAT45(M,P) M(45,P)
#define BOOST_PREPROCESSOR_REPEAT47(M,P) BOOST_PREPROCESSOR_REPEAT46(M,P) M(46,P)
#define BOOST_PREPROCESSOR_REPEAT48(M,P) BOOST_PREPROCESSOR_REPEAT47(M,P) M(47,P)
#define BOOST_PREPROCESSOR_REPEAT49(M,P) BOOST_PREPROCESSOR_REPEAT48(M,P) M(48,P)
#define BOOST_PREPROCESSOR_REPEAT50(M,P) BOOST_PREPROCESSOR_REPEAT49(M,P) M(49,P)
#define BOOST_PREPROCESSOR_REPEAT51(M,P) BOOST_PREPROCESSOR_REPEAT50(M,P) M(50,P)
#define BOOST_PREPROCESSOR_REPEAT52(M,P) BOOST_PREPROCESSOR_REPEAT51(M,P) M(51,P)
#define BOOST_PREPROCESSOR_REPEAT53(M,P) BOOST_PREPROCESSOR_REPEAT52(M,P) M(52,P)
#define BOOST_PREPROCESSOR_REPEAT54(M,P) BOOST_PREPROCESSOR_REPEAT53(M,P) M(53,P)
#define BOOST_PREPROCESSOR_REPEAT55(M,P) BOOST_PREPROCESSOR_REPEAT54(M,P) M(54,P)
#define BOOST_PREPROCESSOR_REPEAT56(M,P) BOOST_PREPROCESSOR_REPEAT55(M,P) M(55,P)
#define BOOST_PREPROCESSOR_REPEAT57(M,P) BOOST_PREPROCESSOR_REPEAT56(M,P) M(56,P)
#define BOOST_PREPROCESSOR_REPEAT58(M,P) BOOST_PREPROCESSOR_REPEAT57(M,P) M(57,P)
#define BOOST_PREPROCESSOR_REPEAT59(M,P) BOOST_PREPROCESSOR_REPEAT58(M,P) M(58,P)
#define BOOST_PREPROCESSOR_REPEAT60(M,P) BOOST_PREPROCESSOR_REPEAT59(M,P) M(59,P)
#define BOOST_PREPROCESSOR_REPEAT61(M,P) BOOST_PREPROCESSOR_REPEAT60(M,P) M(60,P)
#define BOOST_PREPROCESSOR_REPEAT62(M,P) BOOST_PREPROCESSOR_REPEAT61(M,P) M(61,P)
#define BOOST_PREPROCESSOR_REPEAT63(M,P) BOOST_PREPROCESSOR_REPEAT62(M,P) M(62,P)
#define BOOST_PREPROCESSOR_REPEAT64(M,P) BOOST_PREPROCESSOR_REPEAT63(M,P) M(63,P)
#define BOOST_PREPROCESSOR_REPEAT65(M,P) BOOST_PREPROCESSOR_REPEAT64(M,P) M(64,P)
#define BOOST_PREPROCESSOR_REPEAT66(M,P) BOOST_PREPROCESSOR_REPEAT65(M,P) M(65,P)
#define BOOST_PREPROCESSOR_REPEAT67(M,P) BOOST_PREPROCESSOR_REPEAT66(M,P) M(66,P)
#define BOOST_PREPROCESSOR_REPEAT68(M,P) BOOST_PREPROCESSOR_REPEAT67(M,P) M(67,P)
#define BOOST_PREPROCESSOR_REPEAT69(M,P) BOOST_PREPROCESSOR_REPEAT68(M,P) M(68,P)
#define BOOST_PREPROCESSOR_REPEAT70(M,P) BOOST_PREPROCESSOR_REPEAT69(M,P) M(69,P)
#define BOOST_PREPROCESSOR_REPEAT71(M,P) BOOST_PREPROCESSOR_REPEAT70(M,P) M(70,P)
#define BOOST_PREPROCESSOR_REPEAT72(M,P) BOOST_PREPROCESSOR_REPEAT71(M,P) M(71,P)
#define BOOST_PREPROCESSOR_REPEAT73(M,P) BOOST_PREPROCESSOR_REPEAT72(M,P) M(72,P)
#define BOOST_PREPROCESSOR_REPEAT74(M,P) BOOST_PREPROCESSOR_REPEAT73(M,P) M(73,P)
#define BOOST_PREPROCESSOR_REPEAT75(M,P) BOOST_PREPROCESSOR_REPEAT74(M,P) M(74,P)
#define BOOST_PREPROCESSOR_REPEAT76(M,P) BOOST_PREPROCESSOR_REPEAT75(M,P) M(75,P)
#define BOOST_PREPROCESSOR_REPEAT77(M,P) BOOST_PREPROCESSOR_REPEAT76(M,P) M(76,P)
#define BOOST_PREPROCESSOR_REPEAT78(M,P) BOOST_PREPROCESSOR_REPEAT77(M,P) M(77,P)
#define BOOST_PREPROCESSOR_REPEAT79(M,P) BOOST_PREPROCESSOR_REPEAT78(M,P) M(78,P)
#define BOOST_PREPROCESSOR_REPEAT80(M,P) BOOST_PREPROCESSOR_REPEAT79(M,P) M(79,P)
#define BOOST_PREPROCESSOR_REPEAT81(M,P) BOOST_PREPROCESSOR_REPEAT80(M,P) M(80,P)
#define BOOST_PREPROCESSOR_REPEAT82(M,P) BOOST_PREPROCESSOR_REPEAT81(M,P) M(81,P)
#define BOOST_PREPROCESSOR_REPEAT83(M,P) BOOST_PREPROCESSOR_REPEAT82(M,P) M(82,P)
#define BOOST_PREPROCESSOR_REPEAT84(M,P) BOOST_PREPROCESSOR_REPEAT83(M,P) M(83,P)
#define BOOST_PREPROCESSOR_REPEAT85(M,P) BOOST_PREPROCESSOR_REPEAT84(M,P) M(84,P)
#define BOOST_PREPROCESSOR_REPEAT86(M,P) BOOST_PREPROCESSOR_REPEAT85(M,P) M(85,P)
#define BOOST_PREPROCESSOR_REPEAT87(M,P) BOOST_PREPROCESSOR_REPEAT86(M,P) M(86,P)
#define BOOST_PREPROCESSOR_REPEAT88(M,P) BOOST_PREPROCESSOR_REPEAT87(M,P) M(87,P)
#define BOOST_PREPROCESSOR_REPEAT89(M,P) BOOST_PREPROCESSOR_REPEAT88(M,P) M(88,P)
#define BOOST_PREPROCESSOR_REPEAT90(M,P) BOOST_PREPROCESSOR_REPEAT89(M,P) M(89,P)
#define BOOST_PREPROCESSOR_REPEAT91(M,P) BOOST_PREPROCESSOR_REPEAT90(M,P) M(90,P)
#define BOOST_PREPROCESSOR_REPEAT92(M,P) BOOST_PREPROCESSOR_REPEAT91(M,P) M(91,P)
#define BOOST_PREPROCESSOR_REPEAT93(M,P) BOOST_PREPROCESSOR_REPEAT92(M,P) M(92,P)
#define BOOST_PREPROCESSOR_REPEAT94(M,P) BOOST_PREPROCESSOR_REPEAT93(M,P) M(93,P)
#define BOOST_PREPROCESSOR_REPEAT95(M,P) BOOST_PREPROCESSOR_REPEAT94(M,P) M(94,P)
#define BOOST_PREPROCESSOR_REPEAT96(M,P) BOOST_PREPROCESSOR_REPEAT95(M,P) M(95,P)
#define BOOST_PREPROCESSOR_REPEAT97(M,P) BOOST_PREPROCESSOR_REPEAT96(M,P) M(96,P)
#define BOOST_PREPROCESSOR_REPEAT98(M,P) BOOST_PREPROCESSOR_REPEAT97(M,P) M(97,P)
#define BOOST_PREPROCESSOR_REPEAT99(M,P) BOOST_PREPROCESSOR_REPEAT98(M,P) M(98,P)
#define BOOST_PREPROCESSOR_REPEAT100(M,P) BOOST_PREPROCESSOR_REPEAT99(M,P) M(99,P)
#define BOOST_PREPROCESSOR_REPEAT101(M,P) BOOST_PREPROCESSOR_REPEAT100(M,P) M(100,P)
#define BOOST_PREPROCESSOR_REPEAT102(M,P) BOOST_PREPROCESSOR_REPEAT101(M,P) M(101,P)
#define BOOST_PREPROCESSOR_REPEAT103(M,P) BOOST_PREPROCESSOR_REPEAT102(M,P) M(102,P)
#define BOOST_PREPROCESSOR_REPEAT104(M,P) BOOST_PREPROCESSOR_REPEAT103(M,P) M(103,P)
#define BOOST_PREPROCESSOR_REPEAT105(M,P) BOOST_PREPROCESSOR_REPEAT104(M,P) M(104,P)
#define BOOST_PREPROCESSOR_REPEAT106(M,P) BOOST_PREPROCESSOR_REPEAT105(M,P) M(105,P)
#define BOOST_PREPROCESSOR_REPEAT107(M,P) BOOST_PREPROCESSOR_REPEAT106(M,P) M(106,P)
#define BOOST_PREPROCESSOR_REPEAT108(M,P) BOOST_PREPROCESSOR_REPEAT107(M,P) M(107,P)
#define BOOST_PREPROCESSOR_REPEAT109(M,P) BOOST_PREPROCESSOR_REPEAT108(M,P) M(108,P)
#define BOOST_PREPROCESSOR_REPEAT110(M,P) BOOST_PREPROCESSOR_REPEAT109(M,P) M(109,P)
#define BOOST_PREPROCESSOR_REPEAT111(M,P) BOOST_PREPROCESSOR_REPEAT110(M,P) M(110,P)
#define BOOST_PREPROCESSOR_REPEAT112(M,P) BOOST_PREPROCESSOR_REPEAT111(M,P) M(111,P)
#define BOOST_PREPROCESSOR_REPEAT113(M,P) BOOST_PREPROCESSOR_REPEAT112(M,P) M(112,P)
#define BOOST_PREPROCESSOR_REPEAT114(M,P) BOOST_PREPROCESSOR_REPEAT113(M,P) M(113,P)
#define BOOST_PREPROCESSOR_REPEAT115(M,P) BOOST_PREPROCESSOR_REPEAT114(M,P) M(114,P)
#define BOOST_PREPROCESSOR_REPEAT116(M,P) BOOST_PREPROCESSOR_REPEAT115(M,P) M(115,P)
#define BOOST_PREPROCESSOR_REPEAT117(M,P) BOOST_PREPROCESSOR_REPEAT116(M,P) M(116,P)
#define BOOST_PREPROCESSOR_REPEAT118(M,P) BOOST_PREPROCESSOR_REPEAT117(M,P) M(117,P)
#define BOOST_PREPROCESSOR_REPEAT119(M,P) BOOST_PREPROCESSOR_REPEAT118(M,P) M(118,P)
#define BOOST_PREPROCESSOR_REPEAT120(M,P) BOOST_PREPROCESSOR_REPEAT119(M,P) M(119,P)
#define BOOST_PREPROCESSOR_REPEAT121(M,P) BOOST_PREPROCESSOR_REPEAT120(M,P) M(120,P)
#define BOOST_PREPROCESSOR_REPEAT122(M,P) BOOST_PREPROCESSOR_REPEAT121(M,P) M(121,P)
#define BOOST_PREPROCESSOR_REPEAT123(M,P) BOOST_PREPROCESSOR_REPEAT122(M,P) M(122,P)
#define BOOST_PREPROCESSOR_REPEAT124(M,P) BOOST_PREPROCESSOR_REPEAT123(M,P) M(123,P)
#define BOOST_PREPROCESSOR_REPEAT125(M,P) BOOST_PREPROCESSOR_REPEAT124(M,P) M(124,P)
#define BOOST_PREPROCESSOR_REPEAT126(M,P) BOOST_PREPROCESSOR_REPEAT125(M,P) M(125,P)
#define BOOST_PREPROCESSOR_REPEAT127(M,P) BOOST_PREPROCESSOR_REPEAT126(M,P) M(126,P)
#define BOOST_PREPROCESSOR_REPEAT128(M,P) BOOST_PREPROCESSOR_REPEAT127(M,P) M(127,P)
#endif /* DOXYGEN_SHOULD_SKIP_THIS */
#endif
