⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cstat.cpp

📁 c c++代码行统计
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        //cout<<buffer<<endl;
        fclose(pf);
        strBuf = buffer;
        delete []buffer;
        return 0;
    }
    protected:
    friend class CNBNCInitState;
    friend class CNBNCAnalyseState;
    friend class CNBNCPPCommentState;
    friend class CNBNCommentState;
    friend class CNBNCBlankState;
    friend class CNBNCCodeState;
    friend class CNBNCEndState;
    string m_strbuf;
    string m_strFName;
    int m_ipos;
    DWORD m_dwCounts;
    DWORD m_dwcodeCounts;
    DWORD m_dwBlankCounts;
    DWORD m_dwCommentCounts;
		/*
        m_pobjInitState = new CNBNCInitState();
        m_pobjAnalyseState= new CNBNCAnalyseState ();
        m_pobjCommentState= new CNBNCommentState ();
        m_pobjBlankState= new CNBNCBlankState     ();
        m_pobjCodeState= new CNBNCCodeState     ();
        m_pobjEndState = new CNBNCEndState();
        m_pobjCPPCommentState = new CNBNCPPCommentState();
		*/

    CNBNCInitState m_objInitState;
    CNBNCAnalyseState m_objAnalyseState;
    CNBNCPPCommentState m_objCPPCommentState;
    CNBNCommentState m_objCommentState;
    CNBNCBlankState m_objBlankState;
    CNBNCCodeState m_objCodeState;
    CNBNCEndState m_objEndState;

    
};
DWORD CNBNCAnalyseState::transfer(Capsule&capsuleData)
    {
        CNBNCCapsule &nbncdata = (CNBNCCapsule &)capsuleData;
        int  &i = nbncdata.m_ipos;
        string& strbuf = nbncdata.m_strbuf;
        if(i>=strbuf.length())
        {
            return NBNC_END;
        }
        if(strbuf[i]==' ' ||strbuf[i]=='\t' ||strbuf[i]=='\n' )
        {
            return NBNC_BLANK;
        }
        if(i<strbuf.length()-1)
        {
            if((strbuf[i] == '/')&&(strbuf[i+1] == '*'))
            {
                i += 2;
                return NBNC_COMMENT;
            }
        }
         if(i<strbuf.length()-1)
        {
            if((strbuf[i] == '/')&&(strbuf[i+1] == '/'))
            {
                i += 2;
                return NBNC_CPPCOMMENT;
            }
        }
       return NBNC_CODE;
    }
    DWORD CNBNCPPCommentState::transfer(Capsule&capsuleData)
    {
        CNBNCCapsule &nbncdata =(CNBNCCapsule&)capsuleData;
        int  &i = nbncdata.m_ipos;
        string& strbuf = nbncdata.m_strbuf;
        if(i>=strbuf.length()-1)
        {
            return NBNC_END;
        }
        while((i<strbuf.length()-1)&&(strbuf[i] != '\n'))
        {
            ++i;
        }
	 if(i>=strbuf.length()-1)
        {
            return NBNC_END;
        }
        ++i;
        ++nbncdata.m_dwCommentCounts;
         return NBNC_ANALYSE;
   }

    DWORD CNBNCommentState::transfer(Capsule&capsuleData)
    {
        CNBNCCapsule &nbncdata =(CNBNCCapsule&)capsuleData;
        int  &i = nbncdata.m_ipos;
        string& strbuf = nbncdata.m_strbuf;
        if(i>=strbuf.length())
        {
            return NBNC_END;
        }

        while((i<strbuf.length()-1))
        {
            if((strbuf[i] == '*')&&(strbuf[i+1] == '/'))
            {
                break;
            }
            if('\n' == strbuf[i])
            {
                ++nbncdata.m_dwCommentCounts;
                ++i;
                while((i<strbuf.length()-1)&&((strbuf[i] == ' ')||(strbuf[i] == '\t')||(strbuf[i] == '\n')))
                {
                    if('\n' == strbuf[i])
                    {
                        ++nbncdata.m_dwBlankCounts;
                    }
                    ++i;
                }  
				
                continue;
            }
            ++i;
        }
        i +=2;
	if(i>=strbuf.length()-1)
        {
            return NBNC_END;
        }
        while((i<strbuf.length()-1)&&((strbuf[i] == ' ')||(strbuf[i] == '\t')||(strbuf[i] == '\n')))
		{
                    if('\n' == strbuf[i])
                    {
                        ++nbncdata.m_dwCommentCounts;
						++i;
						break;
                    }
                    ++i;
					

		}
        return NBNC_ANALYSE;
    };
    DWORD CNBNCBlankState::transfer(Capsule&capsuleData)
    {
        CNBNCCapsule &nbncdata =(CNBNCCapsule&)capsuleData;
        int  &i = nbncdata.m_ipos;
        string& strbuf = nbncdata.m_strbuf;
        if(i>=strbuf.length())
        {
            return NBNC_END;
        }
        while(i<strbuf.length()&&(strbuf[i]==' ' ||strbuf[i]=='\t' ||strbuf[i]=='\n'))
        {
            if(strbuf[i]=='\n' )
            {
                ++nbncdata.m_dwBlankCounts;
            }
            ++i;
        }
         if(i>=strbuf.length())
         {
            return NBNC_END;
         }
        return NBNC_ANALYSE;
    }

    DWORD CNBNCCodeState::transfer(Capsule&capsuleData)
    {
        CNBNCCapsule &nbncdata =(CNBNCCapsule&)capsuleData;
        int  &i = nbncdata.m_ipos;
        string& strbuf = nbncdata.m_strbuf;
        if(i>=strbuf.length())
        {
            return NBNC_END;
        }
		vector<DWORD>vt;
        while((i<strbuf.length()-1))
                  //&&(strbuf[i]!='/' &&strbuf[i+1]!='*')
                  //)
        {
			if(strbuf[i]=='/' &&strbuf[i+1]=='*')
			{
				vt.push_back(1);
			}
			if(strbuf[i]=='*' &&strbuf[i+1]=='/')
			{
				if(!vt.empty())
				vt.pop_back();
			}

            if(strbuf[i]=='\n' )
            {
                ++nbncdata.m_dwcodeCounts;
                ++i;
				if(vt.empty())
				{
					return NBNC_ANALYSE;
				}
				return NBNC_COMMENT;
            }
            ++i;
        }
         if(i>=strbuf.length()-1)
         {
            return NBNC_END;
         }
         
        return NBNC_ANALYSE;
    }


    DWORD CNBNCInitState::transfer(Capsule&capsuleData)
    {
        CNBNCCapsule &nbncdata =(CNBNCCapsule&)capsuleData;
        int  &i = nbncdata.m_ipos;
        string& strbuf = nbncdata.m_strbuf;
        if(strbuf.empty())
        {
            return NBNC_END;
        }
        return NBNC_ANALYSE;
    }

    DWORD CNBNCEndState::transfer(Capsule&capsuleData)
    {
		/*
        CNBNCCapsule &nbncdata =(CNBNCCapsule&)capsuleData;
        string& strbuf = nbncdata.m_strbuf;
        int  i =  strbuf.length()-1;
        while(i>0 && (strbuf[i]==' ' ||strbuf[i]=='\t' ||strbuf[i]=='\n' ))
        {
            if(strbuf[i]=='\n' )
            {
                 ++nbncdata.m_dwBlankCounts;
                 --i;
                 break;
            }
            --i;
        }
        if(strbuf[i]=='/' && strbuf[i-1]=='*' )
        {
                ++nbncdata.m_dwCommentCounts;
        }
        else
            {
                    ++nbncdata.m_dwcodeCounts;
            }
			*/
        return NBNC_ENDED;

    }

bool needStat(const string&str)
{
    int len = str.length();
    if(len<4)
    {
        return false;
    }
    //cout<<str<<")"<<endl;
    string strTmp = str.substr(len-2,2);
    //cout<<strTmp<<")"<<endl;
    if(strTmp==".h" || strTmp==".c")
    {
        return true;
    }
    strTmp = str.substr(len-4,4);
    //cout<<strTmp<<")"<<endl;
    if(strTmp == ".cpp" || strTmp==".sig"||strTmp==".hpp")
    {
        return true;
    }
    return false;
}
bool needRRTStat(const string&str)
{
    int len = str.length();
    string rtclass = ".rtclass";
    if(len<rtclass.length())
    {
        return false;
    }
    if((str.find("Test")!=string::npos)
        ||(str.find("test")!=string::npos))
    {
        return false;
    }
    //cout<<str<<")"<<endl;
    string strTmp = str.substr(len-rtclass.length(),rtclass.length());
    //cout<<strTmp<<")"<<endl;
    if(strTmp==rtclass)
    {
        return true;
    }
    /*
    strTmp = str.substr(len-4,4);
    //cout<<strTmp<<")"<<endl;
    if(strTmp == ".cpp" || strTmp==".sig"||strTmp==".hpp")
    {
        return true;
    }
    */
    return false;
}

void statCodeLines(const string &strdir,map<string,codeStatS>&m_count,codeStatS&sumup)
{
    vector<string>v_dirs;
    map<string,vector<string> >v_tree;
    getDirs2(v_dirs,v_tree,strdir);
    
    //string strCmd = "ls ";
    /*
    for(int i=0;i<v_dirs.size();++i)
    {
        cout<<v_dirs[i]<<endl;
     
    }
    */
    CNBNCCapsule obj ;
    codeStatS objCodeStat = {0};

    map<string,vector<string> >::iterator it = v_tree.begin();
    for(;it != v_tree.end(); ++it)
    {
        
        for(int i=0;i<it->second.size();++i)
        {
			codeStatS objCodeTmp = {0};
            obj.Init(it->second[i].c_str());
            obj.Action();
            obj.GetCount(objCodeStat.m_dwCounts,objCodeStat.m_dwcodeCounts,  objCodeStat.m_dwBlankCounts,objCodeStat.m_dwCommentCounts);
            obj.GetCount(objCodeTmp.m_dwCounts,objCodeTmp.m_dwcodeCounts,  objCodeTmp.m_dwBlankCounts,objCodeTmp.m_dwCommentCounts);
			m_count[it->second[i]] = objCodeTmp;
        }
    }
	sumup = objCodeStat;
	/*
    cout<<"___________________________________________________________________________"<<endl;
    cout<<"__Sum______NBNACode_______Comment_______Blank___________"<<endl;
    cout<<"  "<<objCodeStat.m_dwCounts<<"   "<<objCodeStat.m_dwcodeCounts<<"          "<<objCodeStat.m_dwCommentCounts<<"         "<<objCodeStat.m_dwBlankCounts<<"   "<<endl;
    double db1 = objCodeStat.m_dwCommentCounts;
    double db2 = objCodeStat.m_dwCounts;
    double dbtmp = db1/db2;
    cout<<"comments percent = "<<dbtmp*100<<"%"<<endl;
	*/
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -