当前位置: 首页>>代码示例>>C++>>正文


C++ StringA::IsBlockNull方法代码示例

本文整理汇总了C++中StringA::IsBlockNull方法的典型用法代码示例。如果您正苦于以下问题:C++ StringA::IsBlockNull方法的具体用法?C++ StringA::IsBlockNull怎么用?C++ StringA::IsBlockNull使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在StringA的用法示例。


在下文中一共展示了StringA::IsBlockNull方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: expand_macro_one

	void expand_macro_one(StringA& str)
	{
		if( str.IsBlockNull() )
			return ;

		//loop
		do {
			//find
			uintptr uCount = 0;
			uintptr uStart = 0;
			do {
				auto iter(StringHelper::Find(str, '{', uStart));
				if( iter.IsNull() )
					break;
				intptr delta = iter.CalcDelta(str.GetAt(uStart));
				if( iter != str.GetBegin() ) {
					auto iter1(iter);
					iter1.MovePrev();
					// \{
					if( iter1.get_Value() == '\\' ) {
						uStart += (delta + 1);
						continue;
					}
				}
				uStart += (delta + 1);
				uCount ++;
				uintptr uLeftC = uStart;
				do {
					auto iterE(StringHelper::Find(str, '}', uStart));
					if( iterE.IsNull() ) {
						uCount --;
						break;
					}
					delta = iterE.CalcDelta(str.GetAt(uStart));
					auto iter1(iterE);
					iter1.MovePrev();
					// \}
					if( iter1.get_Value() == '\\' ) {
						uStart += (delta + 1);
						continue;
					}
					uStart += (delta + 1);
					intptr len = iterE.CalcDelta(iter);
					//empty
					if( len <= 1 ) {
						uCount --;
						break;
					}
					//macro name
					StringA strMacro(StringHelper::MakeEmptyString<CharA>(MemoryHelper::GetCrtMemoryManager()));  //may throw
					StringUtilHelper::Sub(str, uLeftC, len - 1, strMacro);  //may throw
					ConstStringA c_macro_name(StringUtilHelper::To_ConstString(strMacro));
					StringA strV;
					uint id = m_macro_table.get_ID(c_macro_name);
					if( id == 0 ) {
						id = m_token_table.get_ID(c_macro_name);
						if( id == 0 ) {
							uCount --;
							break;
						}
						strV = m_token_regex[id - m_token_table.GetMinID()].get_Value();
					}
					else {
						strV = m_macro_regex[id - m_macro_table.GetMinID()].get_Value();
					}
					iter.get_Value() = '(';
					iterE.get_Value() = ')';
					StringHelper::Delete(uLeftC, len - 1, str);
					StringUtilHelper::Insert(uLeftC, strV, str);  //may throw
					//now iterators are invalid
					uStart = uLeftC + strV.GetLength() + 1;
					break;
				} while(true);
			} while(true);
			if( uCount == 0 )
				break;
		} while(true);
	}
开发者ID:,项目名称:,代码行数:78,代码来源:


注:本文中的StringA::IsBlockNull方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。