/* Copyright (C) 2011 The Android Open Source Project ** ** This software is licensed under the terms of the GNU General Public ** License version 2, as published by the Free Software Foundation, and ** may be copied, distributed, and modified under those terms. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. */ #ifndef ANDROID_UTILS_DUFF_H #define ANDROID_UTILS_DUFF_H /********************************************************************* ********************************************************************* ***** ***** DUFF'S DEVICES ***** *****/ #define DUFF1(_count,_stmnt) \ do { \ int __n = (_count); \ do { \ _stmnt; \ } while (--__n > 0); \ } while (0); #define DUFF2(_count,_stmnt) \ ({ \ int __count = (_count); \ int __n = (__count +1)/2; \ switch (__count & 1) { \ case 0: do { _stmnt; \ case 1: _stmnt; \ } while (--__n > 0); \ } \ }) #define DUFF4(_count,_stmnt) \ ({ \ int __count = (_count); \ int __n = (__count +3)/4; \ switch (__count & 3) { \ case 0: do { _stmnt; \ case 3: _stmnt; \ case 2: _stmnt; \ case 1: _stmnt; \ } while (--__n > 0); \ } \ }) #define DUFF8(_count,_stmnt) \ ({ \ int __count = (_count); \ int __n = (__count+7)/8; \ switch (__count & 7) { \ case 0: do { _stmnt; \ case 7: _stmnt; \ case 6: _stmnt; \ case 5: _stmnt; \ case 4: _stmnt; \ case 3: _stmnt; \ case 2: _stmnt; \ case 1: _stmnt; \ } while (--__n > 0); \ } \ }) #endif /* ANDROID_UTILS_DUFF_H */