createlanguagesupport.cmake
来自「DTMK软件开发包,此为开源软件,是一款很好的医学图像开发资源.」· CMAKE 代码 · 共 471 行 · 第 1/2 页
CMAKE
471 行
MACRO(ADD_PYTHON_TYPEMAP simple_name cpp_name swig_name template_params_without_u)
# TODO: remove this hack once bug #6177 is fixed
STRING(REGEX REPLACE "(^| |<|,)([0-9]+)($| |>|,)" "\\1\\2u\\3" template_params "${template_params_without_u}")
SET(text "\n\n")
IF("${cpp_name}" STREQUAL "itk::SmartPointer")
ADD_PYTHON_POINTER_TYPEMAP("${template_params}")
ENDIF("${cpp_name}" STREQUAL "itk::SmartPointer")
IF("${cpp_name}" STREQUAL "itk::Index")
ADD_PYTHON_SEQ_TYPEMAP("${cpp_name}" "${template_params}")
ENDIF("${cpp_name}" STREQUAL "itk::Index")
IF("${cpp_name}" STREQUAL "itk::Size")
ADD_PYTHON_SEQ_TYPEMAP("${cpp_name}" "${template_params}")
ENDIF("${cpp_name}" STREQUAL "itk::Size")
# IF("${cpp_name}" STREQUAL "itk::RGBPixel")
# ADD_PYTHON_SEQ_TYPEMAP("${cpp_name}" "${template_params}")
# ENDIF("${cpp_name}" STREQUAL "itk::RGBPixel")
IF("${cpp_name}" STREQUAL "itk::Offset")
ADD_PYTHON_SEQ_TYPEMAP("${cpp_name}" "${template_params}")
ENDIF("${cpp_name}" STREQUAL "itk::Offset")
IF("${cpp_name}" STREQUAL "itk::FixedArray")
ADD_PYTHON_VEC_TYPEMAP("${cpp_name}" "${template_params}")
ENDIF("${cpp_name}" STREQUAL "itk::FixedArray")
IF("${cpp_name}" STREQUAL "itk::Vector")
ADD_PYTHON_VEC_TYPEMAP("${cpp_name}" "${template_params}")
ENDIF("${cpp_name}" STREQUAL "itk::Vector")
IF("${cpp_name}" STREQUAL "itk::CovariantVector")
ADD_PYTHON_VEC_TYPEMAP("${cpp_name}" "${template_params}")
ENDIF("${cpp_name}" STREQUAL "itk::CovariantVector")
IF("${cpp_name}" STREQUAL "itk::Point")
ADD_PYTHON_VEC_TYPEMAP("${cpp_name}" "${template_params}")
ENDIF("${cpp_name}" STREQUAL "itk::Point")
IF("${cpp_name}" STREQUAL "itk::ContinuousIndex")
ADD_PYTHON_VEC_TYPEMAP("${cpp_name}" "${template_params}")
ENDIF("${cpp_name}" STREQUAL "itk::ContinuousIndex")
IF("${cpp_name}" STREQUAL "itk::Array")
ADD_PYTHON_VARIABLE_LENGHT_SEQ_TYPEMAP("${cpp_name}< ${template_params} >" "${template_params}")
ENDIF("${cpp_name}" STREQUAL "itk::Array")
ENDMACRO(ADD_PYTHON_TYPEMAP)
MACRO(ADD_PYTHON_SEQ_TYPEMAP cpp_name dim)
SET(text "\n\n")
SET(text "${text}#ifdef SWIGPYTHON\n")
SET(text "${text}%typemap(in) ${cpp_name}<${dim}>& (${cpp_name}<${dim}> itks) {\n")
SET(text "${text} if ((SWIG_ConvertPtr($input,(void **)(&$1),$1_descriptor, 0)) == -1) {\n")
SET(text "${text} PyErr_Clear();\n")
SET(text "${text} if (PySequence_Check($input) && PyObject_Length($input) == ${dim}) {\n")
SET(text "${text} for (int i =0; i < ${dim}; i++) {\n")
SET(text "${text} PyObject *o = PySequence_GetItem($input,i);\n")
SET(text "${text} if (!PyInt_Check(o)) {\n")
SET(text "${text} PyErr_SetString(PyExc_ValueError,\"Expecting a sequence of int\");\n")
SET(text "${text} return NULL;\n")
SET(text "${text} }\n")
SET(text "${text} itks[i] = PyInt_AsLong(o);\n")
SET(text "${text} }\n")
SET(text "${text} $1 = &itks;\n")
SET(text "${text} }else if (PyInt_Check($input)) {\n")
SET(text "${text} for (int i =0; i < ${dim}; i++) {\n")
SET(text "${text} itks[i] = PyInt_AsLong($input);\n")
SET(text "${text} }\n")
SET(text "${text} $1 = &itks;\n")
SET(text "${text} } else {\n")
SET(text "${text} SWIG_fail;\n")
SET(text "${text} }\n")
SET(text "${text} }\n")
SET(text "${text}}\n")
SET(text "${text}%typemap(typecheck) ${cpp_name}<${dim}>& {\n")
SET(text "${text} void *ptr;\n")
SET(text "${text} if (SWIG_ConvertPtr($input, &ptr, $1_descriptor, 0) == -1\n")
SET(text "${text} && ( !PySequence_Check($input) || PyObject_Length($input) != ${dim} )\n")
SET(text "${text} && !PyInt_Check($input) ) {\n")
SET(text "${text} _v = 0;\n")
SET(text "${text} PyErr_Clear();\n")
SET(text "${text} } else {\n")
SET(text "${text} _v = 1;\n")
SET(text "${text} }\n")
SET(text "${text}}\n")
SET(text "${text}%typemap(in) ${cpp_name}<${dim}> (${cpp_name}<${dim}> itks) {\n")
SET(text "${text} ${cpp_name}<${dim}> * s;\n")
SET(text "${text} if ((SWIG_ConvertPtr($input,(void **)(&s),$descriptor(${cpp_name}<${dim}>*), 0)) == -1) {\n")
SET(text "${text} PyErr_Clear();\n")
SET(text "${text} if (PySequence_Check($input) && PyObject_Length($input) == ${dim}) {\n")
SET(text "${text} for (int i =0; i < ${dim}; i++) {\n")
SET(text "${text} PyObject *o = PySequence_GetItem($input,i);\n")
SET(text "${text} if (!PyInt_Check(o)) {\n")
SET(text "${text} PyErr_SetString(PyExc_ValueError,\"Expecting a sequence of int\");\n")
SET(text "${text} return NULL;\n")
SET(text "${text} }\n")
SET(text "${text} itks[i] = PyInt_AsLong(o);\n")
SET(text "${text} }\n")
SET(text "${text} $1 = itks;\n")
SET(text "${text} }else if (PyInt_Check($input)) {\n")
SET(text "${text} for (int i =0; i < ${dim}; i++) {\n")
SET(text "${text} itks[i] = PyInt_AsLong($input);\n")
SET(text "${text} }\n")
SET(text "${text} $1 = itks;\n")
SET(text "${text} } else {\n")
SET(text "${text} SWIG_fail;\n")
SET(text "${text} }\n")
SET(text "${text} } else if( s != NULL ) {\n")
SET(text "${text} $1 = *s;\n")
SET(text "${text} } else {\n")
SET(text "${text} PyErr_SetString(PyExc_ValueError, \"Value can't be None\");\n")
SET(text "${text} SWIG_fail;\n")
SET(text "${text} }\n")
SET(text "${text}}\n")
SET(text "${text}%typemap(typecheck) ${cpp_name}<${dim}> {\n")
SET(text "${text} void *ptr;\n")
SET(text "${text} if (SWIG_ConvertPtr($input, &ptr, $descriptor(${cpp_name}<${dim}>*), 0) == -1\n")
SET(text "${text} && ( !PySequence_Check($input) || PyObject_Length($input) != ${dim} )\n")
SET(text "${text} && !PyInt_Check($input) ) {\n")
SET(text "${text} _v = 0;\n")
SET(text "${text} PyErr_Clear();\n")
SET(text "${text} } else {\n")
SET(text "${text} _v = 1;\n")
SET(text "${text} }\n")
SET(text "${text}}\n")
SET(text "${text}#endif // SWIGPYTHON\n")
SET(text "${text}\n\n")
SET(WRAPPER_TYPEMAPS "${WRAPPER_TYPEMAPS}${text}")
ENDMACRO(ADD_PYTHON_SEQ_TYPEMAP)
MACRO(ADD_PYTHON_VEC_TYPEMAP cpp_name template_params)
STRING(REGEX REPLACE "(.*),(.*)" "\\1" type "${template_params}")
STRING(REGEX REPLACE "(.*),(.*)" "\\2" dim "${template_params}")
SET(text "\n\n")
SET(text "${text}#ifdef SWIGPYTHON\n")
SET(text "${text}%typemap(in) ${cpp_name}<${template_params}>& (${cpp_name}<${template_params}> itks) {\n")
SET(text "${text} if ((SWIG_ConvertPtr($input,(void **)(&$1),$1_descriptor, 0)) == -1) {\n")
SET(text "${text} PyErr_Clear();\n")
SET(text "${text} if (PySequence_Check($input) && PyObject_Length($input) == ${dim}) {\n")
SET(text "${text} for (int i =0; i < ${dim}; i++) {\n")
SET(text "${text} PyObject *o = PySequence_GetItem($input,i);\n")
SET(text "${text} if (PyInt_Check(o)) {\n")
SET(text "${text} itks[i] = PyInt_AsLong(o);\n")
SET(text "${text} } else if (PyFloat_Check(o)) {\n")
SET(text "${text} itks[i] = (${type})PyFloat_AsDouble(o);\n")
SET(text "${text} } else {\n")
SET(text "${text} PyErr_SetString(PyExc_ValueError,\"Expecting a sequence of int or float\");\n")
SET(text "${text} return NULL;\n")
SET(text "${text} }\n")
SET(text "${text} }\n")
SET(text "${text} $1 = &itks;\n")
SET(text "${text} }else if (PyInt_Check($input)) {\n")
SET(text "${text} for (int i =0; i < ${dim}; i++) {\n")
SET(text "${text} itks[i] = PyInt_AsLong($input);\n")
SET(text "${text} }\n")
SET(text "${text} $1 = &itks;\n")
SET(text "${text} }else if (PyFloat_Check($input)) {\n")
SET(text "${text} for (int i =0; i < ${dim}; i++) {\n")
SET(text "${text} itks[i] = (${type})PyFloat_AsDouble($input);\n")
SET(text "${text} }\n")
SET(text "${text} $1 = &itks;\n")
SET(text "${text} } else {\n")
SET(text "${text} SWIG_fail;\n")
SET(text "${text} }\n")
SET(text "${text} }\n")
SET(text "${text}}\n")
SET(text "${text}%typemap(typecheck) ${cpp_name}<${template_params}>& {\n")
SET(text "${text} void *ptr;\n")
SET(text "${text} if (SWIG_ConvertPtr($input, &ptr, $1_descriptor, 0) == -1\n")
SET(text "${text} && ( !PySequence_Check($input) || PyObject_Length($input) != ${dim} )\n")
SET(text "${text} && !PyInt_Check($input) && !PyFloat_Check($input) ) {\n")
SET(text "${text} _v = 0;\n")
SET(text "${text} PyErr_Clear();\n")
SET(text "${text} } else {\n")
SET(text "${text} _v = 1;\n")
SET(text "${text} }\n")
SET(text "${text}}\n")
SET(text "${text}%typemap(in) ${cpp_name}<${template_params}> (${cpp_name}<${template_params}> itks) {\n")
SET(text "${text} ${cpp_name}<${template_params}> * s;\n")
SET(text "${text} if ((SWIG_ConvertPtr($input,(void **)(&s),$descriptor(${cpp_name}<${template_params}>*), 0)) == -1) {\n")
SET(text "${text} PyErr_Clear();\n")
SET(text "${text} if (PySequence_Check($input) && PyObject_Length($input) == ${dim}) {\n")
SET(text "${text} for (int i =0; i < ${dim}; i++) {\n")
SET(text "${text} PyObject *o = PySequence_GetItem($input,i);\n")
SET(text "${text} if (PyInt_Check(o)) {\n")
SET(text "${text} itks[i] = PyInt_AsLong(o);\n")
SET(text "${text} } else if (PyFloat_Check(o)) {\n")
SET(text "${text} itks[i] = (${type})PyFloat_AsDouble(o);\n")
SET(text "${text} } else {\n")
SET(text "${text} PyErr_SetString(PyExc_ValueError,\"Expecting a sequence of int or float\");\n")
SET(text "${text} return NULL;\n")
SET(text "${text} }\n")
SET(text "${text} }\n")
SET(text "${text} $1 = itks;\n")
SET(text "${text} }else if (PyInt_Check($input)) {\n")
SET(text "${text} for (int i =0; i < ${dim}; i++) {\n")
SET(text "${text} itks[i] = PyInt_AsLong($input);\n")
SET(text "${text} }\n")
SET(text "${text} $1 = itks;\n")
SET(text "${text} }else if (PyFloat_Check($input)) {\n")
SET(text "${text} for (int i =0; i < ${dim}; i++) {\n")
SET(text "${text} itks[i] = (${type})PyFloat_AsDouble($input);\n")
SET(text "${text} }\n")
SET(text "${text} $1 = itks;\n")
SET(text "${text} } else {\n")
SET(text "${text} SWIG_fail;\n")
SET(text "${text} }\n")
SET(text "${text} } else if( s != NULL ) {\n")
SET(text "${text} $1 = *s;\n")
SET(text "${text} } else {\n")
SET(text "${text} PyErr_SetString(PyExc_ValueError, \"Value can't be None\");\n")
SET(text "${text} SWIG_fail;\n")
SET(text "${text} }\n")
SET(text "${text}}\n")
SET(text "${text}%typemap(typecheck) ${cpp_name}<${template_params}> {\n")
SET(text "${text} void *ptr;\n")
SET(text "${text} if (SWIG_ConvertPtr($input, &ptr, $descriptor(${cpp_name}<${template_params}>*), 0) == -1\n")
SET(text "${text} && ( !PySequence_Check($input) || PyObject_Length($input) != ${dim} )\n")
SET(text "${text} && !PyInt_Check($input) && !PyFloat_Check($input) ) {\n")
SET(text "${text} _v = 0;\n")
SET(text "${text} PyErr_Clear();\n")
SET(text "${text} } else {\n")
SET(text "${text} _v = 1;\n")
SET(text "${text} }\n")
SET(text "${text}}\n")
SET(text "${text}#endif // SWIGPYTHON\n")
SET(text "${text}\n\n")
SET(WRAPPER_TYPEMAPS "${WRAPPER_TYPEMAPS}${text}")
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?