void CoverageHeader::write(SharedFile &outDefFile, OovStringRef const /*srcFn*/, int numInstrLines) { std::string fnDef = getFileDefine(); mInstrDefineMap[fnDef] = numInstrLines; int totalCount = 0; for(auto const &defItem : mInstrDefineMap) { totalCount += defItem.second; } if(outDefFile.isOpen()) { OovString buf; static char const *lines[] = { "// Automatically generated file by OovCovInstr\n", "// This file should not normally be edited manually.\n", "#define COV_IN(fileIndex, instrIndex) gCoverage[fileIndex+instrIndex]++;\n", }; for(size_t i=0; i<sizeof(lines)/sizeof(lines[0]); i++) { buf += lines[i]; } buf += "#define COV_TOTAL_INSTRS "; buf.appendInt(totalCount); buf += "\n"; buf += "extern unsigned short gCoverage[COV_TOTAL_INSTRS];\n"; int coverageCount = 0; for(auto const &defItem : mInstrDefineMap) { OovString def = "#define "; def += defItem.first; def += " "; def.appendInt(coverageCount); coverageCount += defItem.second; def += " // "; def.appendInt(defItem.second); def += "\n"; buf += def; } outDefFile.truncate(); OovStatus status = outDefFile.seekBegin(); if(status.ok()) { status = outDefFile.write(&buf[0], static_cast<int>(buf.size())); } if(status.needReport()) { status.report(ET_Error, "Unable to write coverage source"); } } }