public static BaseType Parse(string type, string varname = null, string callresult = null) { type = Cleanup.ConvertType(type); if (varname == "ppOutMessages") { return new PointerType { NativeType = "void *", VarName = varname } } ; if (type == "SteamAPIWarningMessageHook_t") { return new PointerType { NativeType = type, VarName = varname } } ; if (type == "SteamAPICall_t") { return new SteamApiCallType { NativeType = type, VarName = varname, CallResult = callresult } } ; if (type == "void") { return new VoidType { NativeType = type, VarName = varname } } ; if (type.Replace(" ", "").StartsWith("constchar*")) { return new ConstCharType { NativeType = type, VarName = varname } } ; if (type == "char *") { return new FetchStringType { NativeType = type, VarName = varname } } ; var basicType = type.Replace("const ", "").Trim(' ', '*', '&'); if (basicType == "void") { return new PointerType { NativeType = type, VarName = varname } } ; if (basicType.StartsWith("ISteam")) { return new PointerType { NativeType = type, VarName = varname } } ; if (basicType == "const void") { return new PointerType { NativeType = type, VarName = varname } } ; if (basicType == "int32" || basicType == "int") { return new IntType { NativeType = type, VarName = varname } } ; if (basicType == "uint") { return new UIntType { NativeType = type, VarName = varname } } ; if (basicType == "uint8") { return new UInt8Type { NativeType = type, VarName = varname } } ; if (basicType == "uint16") { return new UInt16Type { NativeType = type, VarName = varname } } ; if (basicType == "unsigned short") { return new UInt16Type { NativeType = type, VarName = varname } } ; // DANGER DANGER Danger if (basicType == "intptr_t") { return new PointerType { NativeType = type, VarName = varname } } ; if (basicType == "size_t") { return new UIntPtrType { NativeType = type, VarName = varname } } ; if (basicType == "uint64") { return new ULongType { NativeType = type, VarName = varname } } ; if (basicType == "int64") { return new LongType { NativeType = type, VarName = varname } } ; if (basicType == "bool") { return new BoolType { NativeType = type, VarName = varname } } ; // // Enum types are handled in a generic way, but we do need to clean up the name // if (Generator.CodeWriter.Current.IsEnum(basicType)) { return(new BaseType { NativeType = Cleanup.CleanEnum(type), VarName = varname }); } // // Structs are generally sent as plain old data, but need marshalling if they're expected as a pointer // if (Generator.CodeWriter.Current.IsStruct(basicType)) { return(new StructType { NativeType = type, VarName = varname, StructName = basicType }); } // // c# doesn't really have typerdefs, so we convert things like HSteamUser into structs // which from a memory point of view behave in the same way. // if (Generator.CodeWriter.Current.IsTypeDef(basicType)) { return(new StructType { NativeType = type, VarName = varname, StructName = basicType }); } return(new BaseType { NativeType = type, VarName = varname }); }