From 25abd43a25b7adccce9e556de6bb4e9528b24706 Mon Sep 17 00:00:00 2001 From: Will Bainbridge Date: Wed, 16 Jun 2021 15:15:48 +0100 Subject: [PATCH] ListOps: Added count function to return the number of occurrences of a value in a list --- .../containers/Lists/ListOps/ListOps.H | 4 ++++ .../Lists/ListOps/ListOpsTemplates.C | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/src/OpenFOAM/containers/Lists/ListOps/ListOps.H b/src/OpenFOAM/containers/Lists/ListOps/ListOps.H index 82abf8e064..5b4299a6e9 100644 --- a/src/OpenFOAM/containers/Lists/ListOps/ListOps.H +++ b/src/OpenFOAM/containers/Lists/ListOps/ListOps.H @@ -168,6 +168,10 @@ List invertManyToMany(const label len, const UList& in) //- Create identity map (map[i] == i) of given length labelList identity(const label len); +//- Count the number of occurrences of a value in a list +template +label count(const ListType& l, typename ListType::const_reference x); + //- Find first occurrence of given element and return index, // return -1 if not found. Linear search. template diff --git a/src/OpenFOAM/containers/Lists/ListOps/ListOpsTemplates.C b/src/OpenFOAM/containers/Lists/ListOps/ListOpsTemplates.C index bf3a719dd6..6737d1be53 100644 --- a/src/OpenFOAM/containers/Lists/ListOps/ListOpsTemplates.C +++ b/src/OpenFOAM/containers/Lists/ListOps/ListOpsTemplates.C @@ -475,6 +475,25 @@ void Foam::invertManyToMany } +template +Foam::label Foam::count +( + const ListType& l, + typename ListType::const_reference x +) +{ + label result = 0; + forAll(l, i) + { + if (l[i] == x) + { + ++ result; + } + } + return result; +} + + template Foam::label Foam::findIndex (