private void WriteThrow(MagickMethod method)
        {
            WriteThrowStart();

            if (method.CreatesInstance)
            {
                WriteLine("IntPtr result;");
            }
            else if (!method.ReturnType.IsVoid)
            {
                WriteLine(method.ReturnType.Native + " result;");
            }

            var arguments = GetNativeArgumentsCall(method);
            var action    = "NativeMethods.{0}." + Class.Name + "_" + method.Name + "(" + arguments + ");";

            if (!method.ReturnType.IsVoid || method.CreatesInstance)
            {
                action = "result = " + action;
            }
            WriteNativeIfContent(action);

            WriteCreateOut(method.Arguments);

            var cleanupString = CreateCleanupString(method);

            if (!string.IsNullOrEmpty(cleanupString))
            {
                WriteCleanup(cleanupString);
            }
            else if (method.CreatesInstance && !Class.IsConst)
            {
                WriteLine("CheckException(exception, result);");
            }
            else
            {
                WriteCheckException(true);
            }

            if (method.CreatesInstance && method.ReturnType.IsVoid)
            {
                WriteLine("if (result != IntPtr.Zero)");
                WriteLine("  Instance = result;");
            }
            else
            {
                WriteReturn(method.ReturnType);
            }
        }
示例#2
0
        protected string GetNativeArgumentsDeclaration(MagickMethod method)
        {
            string arguments = GetNativeArgumentsDeclaration(method.Arguments);

            if (Class.IsStatic || method.IsStatic)
            {
                return(arguments);
            }
            else if (string.IsNullOrEmpty(arguments))
            {
                return("IntPtr Instance");
            }
            else
            {
                return("IntPtr Instance, " + arguments);
            }
        }
    private string CreateCleanupString(MagickMethod method)
    {
      if (method.Cleanup == null)
      {
        if (!Class.HasInstance && !method.ReturnType.IsVoid)
          return "Dispose(result);";

        return null;
      }

      var cleanup = method.Cleanup;

      string result = cleanup.Name + "(result";
      if (cleanup.Arguments.Count() > 0)
        result += ", " + string.Join(", ", cleanup.Arguments);
      return result + ");";
    }
示例#4
0
        protected string?GetNativeArgumentsCall(MagickMethod method)
        {
            var arguments = GetNativeArgumentsCall(method.Arguments);

            if (Class.IsStatic || method.IsStatic)
            {
                return(arguments);
            }
            else if (string.IsNullOrEmpty(arguments))
            {
                return("Instance");
            }
            else
            {
                return("Instance, " + arguments);
            }
        }
        private string CreateCleanupString(MagickMethod method)
        {
            if (method.Cleanup == null)
            {
                if (!Class.HasInstance && !method.ReturnType.IsVoid)
                {
                    return("Dispose(result);");
                }

                return(null);
            }

            var cleanup = method.Cleanup;

            string result = cleanup.Name + "(result";

            if (cleanup.Arguments.Count() > 0)
            {
                result += ", " + string.Join(", ", cleanup.Arguments);
            }
            return(result + ");");
        }
    private void WriteThrow(MagickMethod method)
    {
      WriteThrowStart();

      if (method.CreatesInstance)
        WriteLine("IntPtr result;");
      else if (!method.ReturnType.IsVoid)
        WriteLine(method.ReturnType.Native + " result;");

      string arguments = GetNativeArgumentsCall(method);
      string action = "NativeMethods.{0}." + Class.Name + "_" + method.Name + "(" + arguments + ");";
      if (!method.ReturnType.IsVoid || method.CreatesInstance)
        action = "result = " + action;
      WriteNativeIfContent(action);

      WriteCreateOut(method.Arguments);

      string cleanupString = CreateCleanupString(method);
      if (!string.IsNullOrEmpty(cleanupString))
        WriteCleanup(cleanupString);
      else if ((method.CreatesInstance) && !Class.IsConst)
        WriteLine("CheckException(exception, result);");
      else
        WriteCheckException(true);

      if (method.CreatesInstance && method.ReturnType.IsVoid)
        WriteLine("Instance = result;");
      else
        WriteReturn(method.ReturnType);
    }
 protected bool HasSpan(MagickMethod method)
 => method.Arguments.Any(argument => argument.Type.IsSpan);
    protected string GetNativeArgumentsDeclaration(MagickMethod method)
    {
      string arguments = GetNativeArgumentsDeclaration(method.Arguments);

      if (Class.IsStatic || method.IsStatic)
        return arguments;
      else if (string.IsNullOrEmpty(arguments))
        return "IntPtr Instance";
      else
        return "IntPtr Instance, " + arguments;
    }