Mono.VisualC.Interop.ABI.MsvcAbi.GetTypeCode C# (CSharp) Метод

GetTypeCode() публичный Метод

public GetTypeCode ( CppType mangleType ) : string
mangleType Mono.VisualC.Interop.CppType
Результат string
        public virtual string GetTypeCode(CppType mangleType)
        {
            CppTypes element = mangleType.ElementType;
            IEnumerable<CppModifiers> modifiers = mangleType.Modifiers;

            StringBuilder code = new StringBuilder ();

            var ptr = For.AnyInputIn (CppModifiers.Pointer);
            var ptrRefOrArray = For.AnyInputIn (CppModifiers.Pointer, CppModifiers.Reference, CppModifiers.Array);

            var modifierCode = modifiers.Reverse ().Transform (

                Choose.TopOne (
                    For.AllInputsIn (CppModifiers.Const, CppModifiers.Volatile).InAnyOrder ().After (ptrRefOrArray).Emit ('D'),
                            For.AnyInputIn (CppModifiers.Const).After (ptrRefOrArray).Emit ('B'),
                    For.AnyInputIn (CppModifiers.Volatile).After (ptrRefOrArray).Emit ('C'),
                            For.AnyInput<CppModifiers> ().After (ptrRefOrArray).Emit ('A')
                    ),

                For.AnyInputIn (CppModifiers.Array).Emit ('Q'),
                For.AnyInputIn (CppModifiers.Reference).Emit ('A'),

                Choose.TopOne (
                            ptr.After ().AllInputsIn (CppModifiers.Const, CppModifiers.Volatile).InAnyOrder ().Emit ('S'),
                    ptr.After ().AnyInputIn (CppModifiers.Const).Emit ('Q'),
                            ptr.After ().AnyInputIn (CppModifiers.Volatile).Emit ('R'),
                            ptr.Emit ('P')
                                ),

                    ptrRefOrArray.AtEnd ().Emit ('A')
            );
            code.Append (modifierCode.ToArray ());

            switch (element) {
            case CppTypes.Void:
                code.Append ('X');
                break;
            case CppTypes.Int:
                code.Append (modifiers.Transform (
                    For.AllInputsIn (CppModifiers.Unsigned, CppModifiers.Short).InAnyOrder ().Emit ('G')
                ).DefaultIfEmpty ('H').ToArray ());
                break;
            case CppTypes.Char:
                code.Append ('D');
                break;
            case CppTypes.Class:
                code.Append ('V');
                code.Append(mangleType.ElementTypeName);
                code.Append ("@@");
                break;
            case CppTypes.Struct:
                code.Append ('U');
                code.Append(mangleType.ElementTypeName);
                code.Append ("@@");
                break;
            case CppTypes.Union:
                code.Append ('T');
                code.Append(mangleType.ElementTypeName);
                code.Append ("@@");
                break;
            case CppTypes.Enum:
                code.Append ("W4");
                code.Append(mangleType.ElementTypeName);
                code.Append ("@@");
                break;
            }

            return code.ToString ();
        }