Exemplo n.º 1
0
        public CachedProperty(ManagedProperty property, string cacheFieldName = null)
        {
            Property = property;

            if (cacheFieldName != null)
            {
                CacheFieldName = cacheFieldName;
            }
            else
            {
                string name = property.Name;
                CacheFieldName = "_" + char.ToLower(name[0]) + name.Substring(1);
            }

            Access = RefAccessSpecifier.Private;
        }
        public CachedProperty(ManagedProperty property, string cacheFieldName = null)
        {
            Property = property;

            if (cacheFieldName != null)
            {
                CacheFieldName = cacheFieldName;
            }
            else
            {
                string name = property.Name;
                CacheFieldName = "_" + char.ToLower(name[0]) + name.Substring(1);
            }

            Access = RefAccessSpecifier.Private;
        }
        void WriteProperty(ManagedProperty prop, int level)
        {
            var getterNative = prop.Getter.Native;
            var setterNative = prop.Setter?.Native;

            EnsureWhiteSpace();

            Write(level + 1, $"public ");
            if (getterNative.IsStatic) Write("static ");
            WriteLine($"{GetTypeNameCS(prop.Type)} {prop.Name}");
            WriteLine(level + 1, "{");

            if (prop.Parent.CachedProperties.ContainsKey(prop.Name))
            {
                var cachedProperty = prop.Parent.CachedProperties[prop.Name];
                WriteLine(level + 2, $"get {{ return {cachedProperty.CacheFieldName}; }}");

                if (setterNative != null)
                {
                    WriteLine(level + 2, "set");
                    WriteLine(level + 2, "{");
                    Write(level + 3, $"{GetFullNameC(prop.Parent.Native)}_{setterNative.Name}(");
                    if (!setterNative.IsStatic) Write("_native, ");
                    WriteLine($"{GetTypeSetterCSMarshal(prop.Type)});");
                    WriteLine(level + 3, $"{cachedProperty.CacheFieldName} = value;");
                    WriteLine(level + 2, "}");
                }
            }
            else
            {
                var type = prop.Type;
                if ((type.Target != null && type.Target.MarshalAsStruct) ||
                    (type.Kind == TypeKind.LValueReference && type.Referenced.Target != null && type.Referenced.Target.MarshalAsStruct))
                {
                    WriteLine(level + 2, "get");
                    WriteLine(level + 2, "{");
                    WriteLine(level + 3, $"{GetTypeNameCS(type)} value;");
                    Write(level + 3, $"{GetFullNameC(prop.Parent.Native)}_{getterNative.Name}(");
                    if (!getterNative.IsStatic) Write("_native, ");
                    WriteLine("out value);");
                    WriteLine(level + 3, "return value;");
                    WriteLine(level + 2, "}");
                }
                else
                {
                    string objPtr = getterNative.IsStatic ? "" : "_native";
                    WriteLine(level + 2, string.Format("get {{ return {0}{1}_{2}({3}){4}; }}",
                        BulletParser.GetTypeMarshalConstructorStartCS(getterNative),
                        GetFullNameC(prop.Parent.Native), getterNative.Name,
                        objPtr,
                        BulletParser.GetTypeMarshalConstructorEndCS(getterNative)));
                }

                if (setterNative != null)
                {
                    string marshal = GetTypeSetterCSMarshal(prop.Type);
                    Write(level + 2,
                        $"set {{ {GetFullNameC(prop.Parent.Native)}_{setterNative.Name}(");
                    if (!setterNative.IsStatic) Write("_native, ");
                    WriteLine($"{marshal}); }}");
                }
            }

            WriteLine(level + 1, "}");

            hasCSWhiteSpace = false;
        }
Exemplo n.º 4
0
        void WriteProperty(ManagedProperty prop, int level)
        {
            var getterNative = prop.Getter.Native;
            var setterNative = prop.Setter?.Native;

            EnsureWhiteSpace();

            Write(level + 1, $"public ");
            if (getterNative.IsStatic)
            {
                Write("static ");
            }
            WriteLine($"{GetTypeNameCS(prop.Type)} {prop.Name}");
            WriteLine(level + 1, "{");

            if (prop.Parent.CachedProperties.ContainsKey(prop.Name))
            {
                var cachedProperty = prop.Parent.CachedProperties[prop.Name];
                WriteLine(level + 2, $"get {{ return {cachedProperty.CacheFieldName}; }}");

                if (setterNative != null)
                {
                    WriteLine(level + 2, "set");
                    WriteLine(level + 2, "{");
                    Write(level + 3, $"{GetFullNameC(prop.Parent.Native)}_{setterNative.Name}(");
                    if (!setterNative.IsStatic)
                    {
                        Write("_native, ");
                    }
                    WriteLine($"{GetTypeSetterCSMarshal(prop.Type)});");
                    WriteLine(level + 3, $"{cachedProperty.CacheFieldName} = value;");
                    WriteLine(level + 2, "}");
                }
            }
            else
            {
                var type = prop.Type;
                if ((type.Target != null && type.Target.MarshalAsStruct) ||
                    (type.Kind == TypeKind.LValueReference && type.Referenced.Target != null && type.Referenced.Target.MarshalAsStruct))
                {
                    WriteLine(level + 2, "get");
                    WriteLine(level + 2, "{");
                    WriteLine(level + 3, $"{GetTypeNameCS(type)} value;");
                    Write(level + 3, $"{GetFullNameC(prop.Parent.Native)}_{getterNative.Name}(");
                    if (!getterNative.IsStatic)
                    {
                        Write("_native, ");
                    }
                    WriteLine("out value);");
                    WriteLine(level + 3, "return value;");
                    WriteLine(level + 2, "}");
                }
                else
                {
                    string objPtr = getterNative.IsStatic ? "" : "_native";
                    WriteLine(level + 2, string.Format("get {{ return {0}{1}_{2}({3}){4}; }}",
                                                       BulletParser.GetTypeMarshalConstructorStartCS(getterNative),
                                                       GetFullNameC(prop.Parent.Native), getterNative.Name,
                                                       objPtr,
                                                       BulletParser.GetTypeMarshalConstructorEndCS(getterNative)));
                }

                if (setterNative != null)
                {
                    string marshal = GetTypeSetterCSMarshal(prop.Type);
                    Write(level + 2,
                          $"set {{ {GetFullNameC(prop.Parent.Native)}_{setterNative.Name}(");
                    if (!setterNative.IsStatic)
                    {
                        Write("_native, ");
                    }
                    WriteLine($"{marshal}); }}");
                }
            }

            WriteLine(level + 1, "}");

            hasCSWhiteSpace = false;
        }