Initial commit for version 2.0.x patch release
[OpenFOAM-2.0.x.git] / src / OpenFOAM / primitives / strings / lists / stringListOpsTemplates.C
blob34d1268432469a6a249f3336eadbace686436439
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2004-2011 OpenCFD Ltd.
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
9     This file is part of OpenFOAM.
11     OpenFOAM is free software: you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by
13     the Free Software Foundation, either version 3 of the License, or
14     (at your option) any later version.
16     OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
19     for more details.
21     You should have received a copy of the GNU General Public License
22     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
24 \*---------------------------------------------------------------------------*/
26 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
28 template<class Matcher, class StringType>
29 Foam::labelList Foam::findMatchingStrings
31     const Matcher& matcher,
32     const UList<StringType>& lst,
33     const bool invert
36     labelList indices(lst.size());
38     label nElem = 0;
39     forAll(lst, elemI)
40     {
41         if (matcher.match(lst[elemI]) ? !invert : invert)
42         {
43             indices[nElem++] = elemI;
44         }
45     }
46     indices.setSize(nElem);
48     return indices;
52 template<class Matcher, class StringListType>
53 StringListType Foam::subsetMatchingStrings
55     const Matcher& matcher,
56     const StringListType& lst,
57     const bool invert
60     // Create copy
61     StringListType newLst(lst.size());
63     // ensure consistent addressable size (eg, DynamicList)
64     newLst.setSize(lst.size());
66     label nElem = 0;
67     forAll(lst, elemI)
68     {
69         if (matcher.match(lst[elemI]) ? !invert : invert)
70         {
71             newLst[nElem++] = lst[elemI];
72         }
73     }
74     newLst.setSize(nElem);
76     return newLst;
80 template<class Matcher, class StringListType>
81 void Foam::inplaceSubsetMatchingStrings
83     const Matcher& matcher,
84     StringListType& lst,
85     const bool invert
88     label nElem = 0;
89     forAll(lst, elemI)
90     {
91         if (matcher.match(lst[elemI]) ? !invert : invert)
92         {
93             lst[nElem++] = lst[elemI];
94         }
95     }
96     lst.setSize(nElem);
100 // ************************************************************************* //