RoadSection::SectionContainer RoadSection::getAdjacent(const Ptr& from) const
{
    // create copy
    SectionContainer ret = m_sections;

    // remove every element == from
    ret.erase(std::remove(ret.begin(), ret.end(), from), ret.end());

    // remove every nullptr
    ret.erase(std::remove(ret.begin(), ret.end(), nullptr), ret.end());

    return ret;
}
예제 #2
0
파일: profiler.cpp 프로젝트: MoLAoS/Mandate
Section *Section::getChild(const string &name){
	SectionContainer::iterator it = children.find(name);
	if (it == children.end()) {
		return NULL;
	}
	return it->second;
}
예제 #3
0
파일: profiler.cpp 프로젝트: MoLAoS/Mandate
void Section::print(ostream *outStream, int tabLevel){
	float percent = ( parent == NULL || parent->microsElapsed == 0 )
					? 100.0f : 100.0f * microsElapsed / parent->microsElapsed;
	string pname= parent==NULL? "": parent->getName();

	for(int i=0; i<tabLevel; ++i)
		*outStream << "\t";

	*outStream << name << ": ";

	if ( microsElapsed ) {
		*outStream << int(microsElapsed) << " us";
		unsigned int milliseconds = microsElapsed / 1000;
		unsigned int seconds = milliseconds / 1000;
		unsigned int minutes = seconds / 60;
		if ( minutes ) {
			*outStream << " (" << minutes << "min " << seconds % 60 << "sec)";
		}
		else if ( seconds ) {
			*outStream << " (" << seconds << "sec " << milliseconds % 1000 << "ms)";
		}
		else if ( milliseconds ) {
			*outStream << " (" << milliseconds << "ms)";
		}
		outStream->precision(1);
		*outStream << std::fixed << ", " << percent << "%";
	}
	if ( calls ) {
		*outStream << ", " << calls << " calls";
	}
	*outStream << "\n";

	SectionContainer::iterator it;
	for(it= children.begin(); it!=children.end(); ++it){
		it->second->print(outStream, tabLevel+1);
	}
}