OpenFOAM logo
Open Source CFD Toolkit

ListLoopM.H

Go to the documentation of this file.
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 // ************************************************************************* //
For further information go to www.openfoam.org