![]() |
Boost.uBlas 1.49
Linear Algebra in C++: matrices, vectors and numeric algorithms
|
00001 // 00002 // Copyright (c) 2000-2002 00003 // Joerg Walter, Mathias Koch 00004 // 00005 // Distributed under the Boost Software License, Version 1.0. (See 00006 // accompanying file LICENSE_1_0.txt or copy at 00007 // http://www.boost.org/LICENSE_1_0.txt) 00008 // 00009 // The authors gratefully acknowledge the support of 00010 // GeNeSys mbH & Co. KG in producing this work. 00011 // 00012 00013 #ifndef _BOOST_UBLAS_DUFF_ 00014 #define _BOOST_UBLAS_DUFF_ 00015 00016 #define DD_SWITCH(n, d, r, expr) \ 00017 { \ 00018 unsigned r = ((n) + (d) - 1) / (d); \ 00019 switch ((n) % (d)) { \ 00020 case 0: do { expr; 00021 #define DD_CASE_I(i, expr) \ 00022 case (i): expr; 00023 #define DD_WHILE(r) \ 00024 } while (-- (r) > 0); \ 00025 } \ 00026 } 00027 00028 #define DD_1T(n, d, r, expr) \ 00029 DD_WHILE(r) 00030 #define DD_2T(n, d, r, expr) \ 00031 DD_CASE_I(1, expr) \ 00032 DD_1T(n, d, r, expr) 00033 #define DD_3T(n, d, r, expr) \ 00034 DD_CASE_I(2, expr) \ 00035 DD_2T(n, d, r, expr) 00036 #define DD_4T(n, d, r, expr) \ 00037 DD_CASE_I(3, expr) \ 00038 DD_3T(n, d, r, expr) 00039 #define DD_5T(n, d, r, expr) \ 00040 DD_CASE_I(4, expr) \ 00041 DD_4T(n, d, r, expr) 00042 #define DD_6T(n, d, r, expr) \ 00043 DD_CASE_I(5, expr) \ 00044 DD_5T(n, d, r, expr) 00045 #define DD_7T(n, d, r, expr) \ 00046 DD_CASE_I(6, expr) \ 00047 DD_6T(n, d, r, expr) 00048 #define DD_8T(n, d, r, expr) \ 00049 DD_CASE_I(7, expr) \ 00050 DD_7T(n, d, r, expr) 00051 00052 #define DD(n, d, r, expr) \ 00053 DD_SWITCH(n, d, r, expr) \ 00054 DD_##d##T(n, d, r, expr) 00055 00056 #endif