#ifndef CPPCOMMON_VEC_FUNCTS_TCC #define CPPCOMMON_VEC_FUNCTS_TCC #include #include #include #include #include namespace CPPCOMMON { using namespace std; template bool isInVec(const vector& vec, const T& item) { typename vector::const_iterator it = find(vec.begin(), vec.end(), item); return it != vec.end(); } template void splitVec(const vector& vecSrc, vector< pair > >& outVec, const vector& patterns) { vector tmp; T pattern; size_t patternSize = patterns.size(); for(size_t i = 0; i < vecSrc.size(); i++) { size_t patternPos = patternSize; for(size_t j = 0; j < patternSize; j++) { if(patterns[j] == vecSrc[i]) { patternPos = j; break; } } if(patternPos != patternSize) { if(!tmp.empty()) { outVec.push_back(make_pair >(pattern, tmp)); tmp.clear(); } pattern = patterns[patternPos]; } else { tmp.push_back(vecSrc[i]); } } if(!tmp.empty()) { outVec.push_back(make_pair >(pattern, tmp)); } } template void splitVec(const vector& vecSrc, vector< vector >& outVec, const vector& patternVec) { vector tmp; for(size_t i = 0; i < vecSrc.size(); i++) { bool flag = false; for(size_t j = 0; j < patternVec.size(); j++) { if(patternVec[j] == vecSrc[i]) { flag = true; break; } } if(flag) { if(!tmp.empty()) { outVec.push_back(tmp); tmp.clear(); } } else { tmp.push_back(vecSrc[i]); } } if(!tmp.empty()) { outVec.push_back(tmp); } } } #endif