Beispiel #1
0
    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
        });
    }