SortableListEFA.H
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration |
5  \\ / A nd | www.openfoam.com
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8  Copyright (C) 2016 OpenFOAM Foundation
9 -------------------------------------------------------------------------------
10 License
11  This file is part of OpenFOAM.
12 
13  OpenFOAM is free software: you can redistribute it and/or modify it
14  under the terms of the GNU General Public License as published by
15  the Free Software Foundation, either version 3 of the License, or
16  (at your option) any later version.
17 
18  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
19  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
20  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
21  for more details.
22 
23  You should have received a copy of the GNU General Public License
24  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
25 
26 Class
27  Foam::SortableListEFA
28 
29 Description
30  A list that is sorted upon construction or when explicitly requested
31  with the sort() method.
32 
33 SourceFiles
34  SortableListEFA.C
35 
36 \*---------------------------------------------------------------------------*/
37 
38 #ifndef SortableListEFA_H
39 #define SortableListEFA_H
40 
41 #include "labelList.H"
42 
43 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
44 
45 namespace Foam
46 {
47 
48 /*---------------------------------------------------------------------------*\
49  Class SortableListEFA Declaration
50 \*---------------------------------------------------------------------------*/
51 
52 template <class Type>
53 class SortableListEFA
54 :
55  public List<Type>
56 {
57  // Private data
58 
59  //- Original indices
60  labelList indices_;
61 
62 
63 public:
64 
65  // Public classes
66 
67  //- Less function class used by the sort function
68  class more
69  {
70  const UList<Type>& values_;
71 
72  public:
73 
74  more(const UList<Type>& values)
75  :
76  values_(values)
77  {}
78 
79  bool operator()(const label a, const label b)
80  {
81  return values_[a] > values_[b];
82  }
83  };
84 
85 
86  // Constructors
87 
88  //- Construct from List, sorting the elements. Starts with indices set
89  // to index in argument
90  explicit SortableListEFA(const List<Type>&);
91 
92  //- Construct given size. Sort later on.
93  explicit SortableListEFA(const label size);
94 
95  //- Construct given size and initial value. Sort later on.
96  SortableListEFA(const label size, const Type&);
97 
98  //- Construct as copy.
100 
101 
102  // Member Functions
103 
104  //- Return the list of sorted indices. Updated every sort.
105  const labelList& indices() const
106  {
107  return indices_;
108  }
109 
110  //- Size the list. If grow can cause undefined indices (until next sort)
111  void setSize(const label);
112 
113  //- Sort the list (if changed after construction time)
114  void sort();
115 
116  //- Partial sort the list (if changed after construction time)
117  void partialSort(int M, int start);
118 
119  //- Sort the list (if changed after construction time)
120  void stableSort();
121 
122 
123  // Member Operators
124 
125  void operator=(const SortableListEFA<Type>&);
126 };
127 
128 
129 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
130 
131 } // End namespace Foam
132 
133 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
134 
135 #ifdef NoRepository
136  #include "SortableListEFA.C"
137 #endif
138 
139 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
140 
141 #endif
142 
143 // ************************************************************************* //
Foam::SortableListEFA::SortableListEFA
SortableListEFA(const List< Type > &)
Construct from List, sorting the elements. Starts with indices set.
Definition: SortableListEFA.C:33
Foam::SortableListEFA::more::more
more(const UList< Type > &values)
Definition: SortableListEFA.H:73
Foam::SortableListEFA::stableSort
void stableSort()
Sort the list (if changed after construction time)
Definition: SortableListEFA.C:127
Foam::HashTableOps::values
List< T > values(const HashTable< T, Key, Hash > &tbl, const bool doSort=false)
List of values from HashTable, optionally sorted.
Definition: HashOps.H:149
Foam::SortableListEFA::more
Less function class used by the sort function.
Definition: SortableListEFA.H:67
SortableListEFA.C
Foam::SortableListEFA::setSize
void setSize(const label)
Size the list. If grow can cause undefined indices (until next sort)
Definition: SortableListEFA.C:85
Foam::SortableListEFA::more::operator()
bool operator()(const label a, const label b)
Definition: SortableListEFA.H:78
Foam::SortableListEFA
A list that is sorted upon construction or when explicitly requested with the sort() method.
Definition: SortableListEFA.H:52
Foam::constant::physicoChemical::b
const dimensionedScalar b
Wien displacement law constant: default SI units: [m.K].
Definition: createFields.H:27
labelList.H
Foam::SortableListEFA::indices
const labelList & indices() const
Return the list of sorted indices. Updated every sort.
Definition: SortableListEFA.H:104
Foam
Namespace for OpenFOAM.
Definition: atmBoundaryLayer.C:33
Foam::SortableListEFA::operator=
void operator=(const SortableListEFA< Type > &)
Definition: SortableListEFA.C:150
Foam::SortableListEFA::partialSort
void partialSort(int M, int start)
Partial sort the list (if changed after construction time)
Definition: SortableListEFA.C:114
Foam::List
A 1D array of objects of type <T>, where the size of the vector is known and used for subscript bound...
Definition: BitOps.H:63
M
#define M(I)
Foam::UList< Type >
Foam::SortableListEFA::sort
void sort()
Sort the list (if changed after construction time)
Definition: SortableListEFA.C:93