view CodeAnalysis/FunctionBody.mustache @ 140:b6835b7a7c0a

code generation on Ubuntu 22.04
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 15 Sep 2023 09:01:26 +0200
parents e7ff5efb100d
children 8382c7dea471
line wrap: on
line source

{{#args}}
  {{python_type}} {{name}}{{initialization}};
{{/args}}

{{#has_args}}
  if (!PyArg_ParseTuple(args, {{tuple_format}}))
  {
    PyErr_SetString(PyExc_TypeError, "Bad types for the arguments ({{count_args}} arguments expected)");
    return NULL;
  }
{{/has_args}}
{{#return_long}}
  long value = {{c_function}}(OrthancPlugins::GetGlobalContext(){{self}}{{call_args}});
  {{#args}}{{release}}{{/args}}
  return PyLong_FromLong(value);
{{/return_long}}
{{#return_static_string}}
  const char* s = {{c_function}}(OrthancPlugins::GetGlobalContext(){{self}}{{call_args}});
  {{#args}}{{release}}{{/args}}
  if (s == NULL)
  {
    Py_INCREF(Py_None);
    return Py_None;
  }
  else
  {
    return PyUnicode_FromString(s);
  }
{{/return_static_string}}
{{#return_dynamic_string}}
  OrthancPlugins::OrthancString s;
  s.Assign({{c_function}}(OrthancPlugins::GetGlobalContext(){{self}}{{call_args}}));
  {{#args}}{{release}}{{/args}}
  if (s.GetContent() == NULL)
  {
    PythonLock::RaiseException(OrthancPluginErrorCode_InternalError);
    return NULL;
  }
  else
  {
    return PyUnicode_FromString(s.GetContent());
  }
{{/return_dynamic_string}}
{{#return_void}}
  {{c_function}}(OrthancPlugins::GetGlobalContext(){{self}}{{call_args}});
  {{#args}}{{release}}{{/args}}

  Py_INCREF(Py_None);
  return Py_None;
{{/return_void}}
{{#return_error}}
  OrthancPluginErrorCode code = {{c_function}}(OrthancPlugins::GetGlobalContext(){{self}}{{call_args}});
  {{#args}}{{release}}{{/args}}

  if (code == OrthancPluginErrorCode_Success)
  {
    Py_INCREF(Py_None);
    return Py_None;
  }
  else
  {
    PythonLock::RaiseException(code);
    return NULL;
  }
{{/return_error}}
{{#return_object}}
  // This is the case of a constructor
  {{return_object}}* obj = {{c_function}}(OrthancPlugins::GetGlobalContext(){{self}}{{call_args}});
  {{#args}}{{release}}{{/args}}
  if (obj == NULL)
  {
    PythonLock::RaiseException(OrthancPluginErrorCode_InternalError);
    return NULL;  
  }
  else
  {
    PyObject *argList = Py_BuildValue("Lb", obj, false /* not borrowed */);
    PyObject *python = PyObject_CallObject((PyObject *) &sdk_{{return_object}}_Type, argList);
    Py_DECREF(argList);
    return python;
  }
{{/return_object}}
{{#return_bytes}}
  OrthancPlugins::MemoryBuffer buffer;
  OrthancPluginErrorCode code = {{c_function}}(OrthancPlugins::GetGlobalContext(), *buffer{{self}}{{call_args}});
  {{#args}}{{release}}{{/args}}
  if (code == OrthancPluginErrorCode_Success)
  {
    return PyBytes_FromStringAndSize(buffer.GetData(), buffer.GetSize());
  }
  else
  {
    PythonLock::RaiseException(code);
    return NULL;  
  }
{{/return_bytes}}
{{#return_enumeration}}
  {{return_enumeration}} value = {{c_function}}(OrthancPlugins::GetGlobalContext(){{self}}{{call_args}});
  {{#args}}{{release}}{{/args}}
  return PyLong_FromLong(value);
{{/return_enumeration}}