1287ece64SGeorge Liu #pragma once
2287ece64SGeorge Liu 
3287ece64SGeorge Liu #include <algorithm>
4*9ea15c35SEd Tanous #include <vector>
5287ece64SGeorge Liu 
6287ece64SGeorge Liu namespace redfish
7287ece64SGeorge Liu {
8287ece64SGeorge Liu 
9287ece64SGeorge Liu namespace stl_utils
10287ece64SGeorge Liu {
11287ece64SGeorge Liu 
12287ece64SGeorge Liu template <typename ForwardIterator>
firstDuplicate(ForwardIterator first,ForwardIterator last)13287ece64SGeorge Liu ForwardIterator firstDuplicate(ForwardIterator first, ForwardIterator last)
14287ece64SGeorge Liu {
15287ece64SGeorge Liu     auto newLast = first;
16287ece64SGeorge Liu 
17287ece64SGeorge Liu     for (auto current = first; current != last; ++current)
18287ece64SGeorge Liu     {
19287ece64SGeorge Liu         if (std::find(first, newLast, *current) == newLast)
20287ece64SGeorge Liu         {
21287ece64SGeorge Liu             if (newLast != current)
22287ece64SGeorge Liu             {
23287ece64SGeorge Liu                 *newLast = *current;
24287ece64SGeorge Liu             }
25287ece64SGeorge Liu             ++newLast;
26287ece64SGeorge Liu         }
27287ece64SGeorge Liu     }
28287ece64SGeorge Liu 
29287ece64SGeorge Liu     return newLast;
30287ece64SGeorge Liu }
31287ece64SGeorge Liu 
32287ece64SGeorge Liu template <typename T>
removeDuplicate(T & t)33287ece64SGeorge Liu void removeDuplicate(T& t)
34287ece64SGeorge Liu {
35287ece64SGeorge Liu     t.erase(firstDuplicate(t.begin(), t.end()), t.end());
36287ece64SGeorge Liu }
37287ece64SGeorge Liu 
38287ece64SGeorge Liu } // namespace stl_utils
39287ece64SGeorge Liu } // namespace redfish
40