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