Exemplo n.º 1
0
	void UnSerialization::parseParamTag(const string& str, string& tag, string& tagParam, string& paramValue)
	{
		// simple tag. Return just the string
		if ( str.find('=') == string::npos )
		{
			tag = str;
			return;
		} 
		
		tag = "";
		tagParam = "";
		paramValue = "";
		
		string::const_iterator p = str.begin();
		
		// get tag name
		insert_iterator<string> tagIt(tag, tag.begin());
		for ( ; p != str.end(); ++p)
		{
			if ( isspace(*p) )
				break;
			*tagIt = *p;
		}
		
		// skip white spaces
		for ( ; isspace(*p) && p != str.end() ; ++p );
		
		// get param name
		insert_iterator<string> paramIt(tagParam, tagParam.begin());
		for ( ; p != str.end(); ++p)
		{
			if (*p == '=')
				break;
			*paramIt = *p;
		}
		
		// skip white spaces
		for ( ; p != str.end() && isspace(*p); ++p );
		// skip =
		for ( ; p != str.end() && *p == '='; ++p );
		// skip white spaces
		for ( ; p != str.end() && isspace(*p); ++p );
		
		// skip opening "
		for ( ; *p == '"' && p != str.end() ; ++p );
		
		// get param value
		insert_iterator<string> valueIt(paramValue, paramValue.begin());
		for ( ; p != str.end(); ++p)
		{
			if (*p == '\"')
				break;
			*valueIt = *p;
		}
		
	}
Exemplo n.º 2
0
    bool UnSerialization::seekAndParseSpecificParamTag(nor_utils::StreamTokenizer& st, const string& tag, const string& targetTagParam, string& paramValue)
	{
		bool tagFound = false;
		string rawTag;
		string foundTag;
		string::const_iterator p;
		
        string tagParam;
        
		tagParam = "";
		paramValue = "";
		
		do {
			
			// the full tag. I.e. <tag param="val">
			rawTag = st.next_token();
			foundTag = "";
			
			p = rawTag.begin();
			
			// get tag name
			insert_iterator<string> tagIt(foundTag, foundTag.begin());
			for ( ; p != rawTag.end(); ++p)
			{
				if ( isspace(*p) )
					break;
				*tagIt = *p;
			}
			
			if ( nor_utils::cmp_nocase(tag, foundTag) )
			{
				tagFound = true;
				break;
			}
			
		} while( st.has_token() );
		
		if ( !tagFound )
			return false;
		
        while (targetTagParam.compare(tagParam) != 0 && p != rawTag.end()) {
            
            // skip white spaces
            for ( ; isspace(*p) && p != rawTag.end() ; ++p );
            
            // get param name
            insert_iterator<string> paramIt(tagParam, tagParam.begin());
            for ( ; p != rawTag.end(); ++p)
            {
                if (*p == '=')
                    break;
                *paramIt = *p;
            }
            
            // skip white spaces
            for ( ; p != rawTag.end() && isspace(*p); ++p );
            // skip =
            for ( ; p != rawTag.end() && *p == '='; ++p );
            // skip white spaces
            for ( ; p != rawTag.end() && isspace(*p); ++p );
            
            // skip opening "
            for ( ; p != rawTag.end() && *p == '"'; ++p );
            
            // get param value
            insert_iterator<string> valueIt(paramValue, paramValue.begin());
            for ( ; p != rawTag.end(); ++p)
            {
                if (*p == '\"')
                    break;
                *valueIt = *p;
            }
            
        }
		
		return true;
	}
UProperty* FCSharpWrapperGenerator::GetWrapperArgsAndReturnType(
	const UFunction* Function, FString& OutFormalInteropArgs, FString& OutActualInteropArgs,
	FString& OutFormalManagedArgs, FString& OutActualManagedArgs
)
{
	OutFormalInteropArgs = TEXT("UObjectHandle self");
	OutActualInteropArgs = NativeThisPointer;
	OutFormalManagedArgs.Empty();
	OutActualManagedArgs.Empty();
	UProperty* returnValue = nullptr;

	for (TFieldIterator<UProperty> paramIt(Function); paramIt; ++paramIt)
	{
		UProperty* param = *paramIt;
		if (param->GetPropertyFlags() & CPF_ReturnParm)
		{
			returnValue = param;
		}
		else
		{
			FString argName = param->GetName();
			FString argInteropType = GetPropertyInteropType(param);
			FString argAttrs = GetPropertyInteropTypeAttributes(param);
			FString argMods = GetPropertyInteropTypeModifiers(param);
			
			OutFormalInteropArgs += TEXT(",");
			if (!argAttrs.IsEmpty())
			{
				OutFormalInteropArgs += TEXT(" ");
				OutFormalInteropArgs += argAttrs;
			}
			if (!argMods.IsEmpty())
			{
				OutFormalInteropArgs += TEXT(" ");
				OutFormalInteropArgs += argMods;
			}
			OutFormalInteropArgs += FString::Printf(
				TEXT(" %s %s"), *argInteropType, *argName
			);

			OutActualInteropArgs += TEXT(",");
			if (!argMods.IsEmpty())
			{
				OutActualInteropArgs += TEXT(" ");
				OutActualInteropArgs += argMods;
			}
			OutActualInteropArgs += TEXT(" ");
			if (param->IsA<UObjectProperty>())
			{
				OutActualInteropArgs += TEXT("(UObjectHandle)");
			}
			OutActualInteropArgs += argName;
									
			if (!OutFormalManagedArgs.IsEmpty())
			{
				OutFormalManagedArgs += TEXT(", ");
			}
			if (!argMods.IsEmpty())
			{
				OutFormalManagedArgs += argMods + TEXT(" ");
			}
			FString ArgManagedType = GetPropertyManagedType(param);
			OutFormalManagedArgs += FString::Printf(TEXT("%s %s"), *ArgManagedType, *argName);
			
			if (!OutActualManagedArgs.IsEmpty())
			{
				OutActualManagedArgs += TEXT(", ");
			}
			OutActualManagedArgs += argName;
		}
	}

	return returnValue;
}