xref: /openbmc/bmcweb/features/redfish/include/utils/stl_utils.hpp (revision 287ece64bf9a8ee0c42f77cefce559054b488ae7)
1 #pragma once
2 
3 #include <algorithm>
4 #include <string>
5 
6 namespace redfish
7 {
8 
9 namespace stl_utils
10 {
11 
12 template <typename ForwardIterator>
13 ForwardIterator firstDuplicate(ForwardIterator first, ForwardIterator last)
14 {
15     auto newLast = first;
16 
17     for (auto current = first; current != last; ++current)
18     {
19         if (std::find(first, newLast, *current) == newLast)
20         {
21             if (newLast != current)
22             {
23                 *newLast = *current;
24             }
25             ++newLast;
26         }
27     }
28 
29     return newLast;
30 }
31 
32 template <typename T>
33 void removeDuplicate(T& t)
34 {
35     t.erase(firstDuplicate(t.begin(), t.end()), t.end());
36 }
37 
38 } // namespace stl_utils
39 } // namespace redfish
40