Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Development
openfoam
Commits
52be85e2
Commit
52be85e2
authored
May 08, 2008
by
Mark Olesen
Browse files
added access to STL stable_sort algorithm
parent
365b6311
Changes
4
Hide whitespace changes
Inline
Side-by-side
src/OpenFOAM/containers/Lists/List/List.C
View file @
52be85e2
...
...
@@ -435,6 +435,20 @@ void sort(List<T>& a, const Cmp& cmp)
}
template
<
class
T
>
void
stableSort
(
List
<
T
>&
a
)
{
std
::
stable_sort
(
a
.
begin
(),
a
.
end
());
}
template
<
class
T
,
class
Cmp
>
void
stableSort
(
List
<
T
>&
a
,
const
Cmp
&
cmp
)
{
std
::
stable_sort
(
a
.
begin
(),
a
.
end
(),
cmp
);
}
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
// Assignment to UList operator. Takes linear time.
...
...
src/OpenFOAM/containers/Lists/List/List.H
View file @
52be85e2
...
...
@@ -28,7 +28,7 @@ Class
Description
A 1D array of objects of type \<T\>, where the size of the vector
is known and used for subscript bounds checking, etc.
Storage is allocated on free-store during construction.
SourceFiles
...
...
@@ -195,6 +195,12 @@ void sort(List<T>& a);
template
<
class
T
,
class
Cmp
>
void
sort
(
List
<
T
>&
a
,
const
Cmp
&
);
template
<
class
T
>
void
stableSort
(
List
<
T
>&
a
);
template
<
class
T
,
class
Cmp
>
void
stableSort
(
List
<
T
>&
a
,
const
Cmp
&
);
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
...
...
src/OpenFOAM/containers/Lists/SortableList/SortableList.C
View file @
52be85e2
...
...
@@ -28,14 +28,11 @@ License
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace
Foam
{
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
// Construct from List
template
<
class
Type
>
SortableList
<
Type
>::
SortableList
(
const
List
<
Type
>&
values
)
Foam
::
SortableList
<
Type
>::
SortableList
(
const
List
<
Type
>&
values
)
:
List
<
Type
>
(
values
),
indices_
(
values
.
size
())
...
...
@@ -46,7 +43,7 @@ SortableList<Type>::SortableList(const List<Type>& values)
// Construct given size. Sort later on.
template
<
class
Type
>
SortableList
<
Type
>::
SortableList
(
const
label
size
)
Foam
::
SortableList
<
Type
>::
SortableList
(
const
label
size
)
:
List
<
Type
>
(
size
),
indices_
(
size
)
...
...
@@ -55,7 +52,7 @@ SortableList<Type>::SortableList(const label size)
// Construct given size and initial value. Sort later on.
template
<
class
Type
>
SortableList
<
Type
>::
SortableList
(
const
label
size
,
const
Type
&
val
)
Foam
::
SortableList
<
Type
>::
SortableList
(
const
label
size
,
const
Type
&
val
)
:
List
<
Type
>
(
size
,
val
),
indices_
(
size
)
...
...
@@ -64,7 +61,7 @@ SortableList<Type>::SortableList(const label size, const Type& val)
// Construct as copy.
template
<
class
Type
>
SortableList
<
Type
>::
SortableList
(
const
SortableList
<
Type
>&
lst
)
Foam
::
SortableList
<
Type
>::
SortableList
(
const
SortableList
<
Type
>&
lst
)
:
List
<
Type
>
(
lst
),
indices_
(
lst
.
indices
())
...
...
@@ -74,7 +71,7 @@ SortableList<Type>::SortableList(const SortableList<Type>& lst)
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
template
<
class
Type
>
void
SortableList
<
Type
>::
setSize
(
const
label
newSize
)
void
Foam
::
SortableList
<
Type
>::
setSize
(
const
label
newSize
)
{
List
<
Type
>::
setSize
(
newSize
);
indices_
.
setSize
(
newSize
);
...
...
@@ -82,7 +79,7 @@ void SortableList<Type>::setSize(const label newSize)
template
<
class
Type
>
void
SortableList
<
Type
>::
sort
()
void
Foam
::
SortableList
<
Type
>::
sort
()
{
forAll
(
indices_
,
i
)
{
...
...
@@ -98,7 +95,29 @@ void SortableList<Type>::sort()
tmpValues
[
i
]
=
this
->
operator
[](
indices_
[
i
]);
}
List
<
Type
>::
operator
=
(
tmpValues
);
List
<
Type
>::
transfer
(
tmpValues
);
}
template
<
class
Type
>
void
Foam
::
SortableList
<
Type
>::
stableSort
()
{
forAll
(
indices_
,
i
)
{
indices_
[
i
]
=
i
;
}
Foam
::
stableSort
(
indices_
,
less
(
*
this
));
List
<
Type
>
tmpValues
(
this
->
size
());
forAll
(
indices_
,
i
)
{
tmpValues
[
i
]
=
this
->
operator
[](
indices_
[
i
]);
}
List
<
Type
>::
transfer
(
tmpValues
);
}
...
...
@@ -114,6 +133,4 @@ void Foam::SortableList<Type>::operator=(const SortableList<Type>& rhs)
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
}
// End namespace Foam
// ************************************************************************* //
src/OpenFOAM/containers/Lists/SortableList/SortableList.H
View file @
52be85e2
...
...
@@ -100,7 +100,7 @@ public:
// Member Functions
//- Return the list of sorted
point
indices. Updated every sort.
//- Return the list of sorted indices. Updated every sort.
const
labelList
&
indices
()
const
{
return
indices_
;
...
...
@@ -112,6 +112,9 @@ public:
//- Sort the list (if changed after construction time)
void
sort
();
//- Sort the list (if changed after construction time)
void
stableSort
();
// Member Operators
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment