Boost.uBlas 1.49
Linear Algebra in C++: matrices, vectors and numeric algorithms

duff.hpp

Go to the documentation of this file.
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