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 LiuForwardIterator 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 Liuvoid 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