![]() |
|
00001 /*---------------------------------------------------------------------------*\ 00002 ========= | 00003 \\ / F ield | OpenFOAM: The Open Source CFD Toolbox 00004 \\ / O peration | 00005 \\ / A nd | Copyright (C) 1991-2005 OpenCFD Ltd. 00006 \\/ M anipulation | 00007 ------------------------------------------------------------------------------- 00008 License 00009 This file is part of OpenFOAM. 00010 00011 OpenFOAM is free software; you can redistribute it and/or modify it 00012 under the terms of the GNU General Public License as published by the 00013 Free Software Foundation; either version 2 of the License, or (at your 00014 option) any later version. 00015 00016 OpenFOAM is distributed in the hope that it will be useful, but WITHOUT 00017 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 00018 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 00019 for more details. 00020 00021 You should have received a copy of the GNU General Public License 00022 along with OpenFOAM; if not, write to the Free Software Foundation, 00023 Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 00024 00025 Description 00026 List<T> is a 1D vector of objects of type T, where the size of the vector 00027 is known and used for subscript bounds checking, etc. 00028 00029 \*---------------------------------------------------------------------------*/ 00030 00031 #ifndef ListLoop_H 00032 #define ListLoop_H 00033 00034 #include "undefListLoopM.H" 00035 00036 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // 00037 00038 #ifdef vectorMachine 00039 00040 // Element access looping using [] for vector machines 00041 00042 #define List_FOR_ALL(f, i) \ 00043 label _n##i = (f).size(); \ 00044 for (label i=0; i<_n##i; i++) \ 00045 { 00046 00047 #define List_END_FOR_ALL } 00048 00049 #define List_ELEM(f, fp, i) (fp[i]) 00050 00051 #define List_ACCESS(type, f, fp) type* restrict fp = (f).begin() 00052 #define List_CONST_ACCESS(type, f, fp) const type* restrict fp = (f).begin() 00053 00054 #else 00055 00056 // Pointer looping for scalar machines 00057 00058 #define List_FOR_ALL(f, i) \ 00059 register label i = (f).size(); \ 00060 while (i--) \ 00061 { \ 00062 00063 #define List_END_FOR_ALL } 00064 00065 #define List_ELEM(f, fp, i) (*--fp) 00066 00067 #define List_ACCESS(type, f, fp) register type* restrict fp = (f).end() 00068 #define List_CONST_ACCESS(type, f, fp) register const type* restrict fp = (f).end() 00069 00070 #endif 00071 00072 00073 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // 00074 00075 #endif 00076 00077 // ************************************************************************* //