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