import cpp string functionName(Function f) { exists(string name, string templateArgs, string args | result = name + templateArgs + args and name = f.getQualifiedName() and ( if exists(f.getATemplateArgument()) then templateArgs = "<" + concat(int i | exists(f.getTemplateArgument(i)) | f.getTemplateArgument(i).toString(), "," order by i ) + ">" else templateArgs = "" ) and args = "(" + concat(int i | exists(f.getParameter(i)) | f.getParameter(i).getType().toString(), "," order by i ) + ")" ) } from string resource, int ntotal, int ncode, int ncomment where exists(File f | f.getShortName() = resource and numlines(unresolveElement(f), ntotal, ncode, ncomment) ) or exists(Function f | functionName(f) = resource and numlines(unresolveElement(f), ntotal, ncode, ncomment) ) select resource, ntotal, ncode, ncomment