📄 svn_types.i
字号:
/*
* svn_types.i : SWIG interface file for svn_types.h
*
* ====================================================================
* Copyright (c) 2000-2003 CollabNet. All rights reserved.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at http://subversion.tigris.org/license-1.html.
* If newer versions of this license are posted there, you may use a
* newer version instead, at your option.
*
* This software consists of voluntary contributions made by many
* individuals. For exact contribution history, see the revision
* history and logs, available at http://subversion.tigris.org/.
* ====================================================================
*/
/* This interface file only defines types and their related information.
There is no module associated with this interface file. */
%import apr.i
/* -----------------------------------------------------------------------
Create a typemap to define "type **" as OUT parameters.
Note: SWIGTYPE is just a placeholder for "some arbitrary type". This
typemap will be applied onto a "real" type.
*/
%typemap(python, in, numinputs=0) SWIGTYPE **OUTPARAM ($*1_type temp) {
$1 = ($1_ltype)&temp;
}
%typemap(java, in) SWIGTYPE **OUTPARAM ($*1_type temp) {
$1 = ($1_ltype)&temp;
}
%typemap(perl5, in, numinputs=0) SWIGTYPE **OUTPARAM ($*1_type temp) {
$1 = ($1_ltype)&temp;
}
%typemap(python, argout, fragment="t_output_helper") SWIGTYPE **OUTPARAM {
$result = t_output_helper($result,
SWIG_NewPointerObj(*$1, $*1_descriptor, 0));
}
%typemap(perl5, argout) SWIGTYPE **OUTPARAM {
ST(argvi) = sv_newmortal();
SWIG_MakePtr(ST(argvi++), (void *)*$1, $*1_descriptor,0);
}
/* -----------------------------------------------------------------------
Create a typemap to handle enums.
*/
%typemap(python, in, numinputs=0) enum SWIGTYPE *OUTENUM ($*1_type temp) {
$1 = ($1_ltype)&temp;
}
%typemap(perl5, in, numinputs=0) enum SWIGTYPE *OUTENUM (long temp) {
$1 = ($1_ltype)&temp;
}
%typemap(perl5, argout) enum SWIGTYPE *OUTENUM {
if (argvi >= items) {
EXTEND(sp,1);
}
$result = sv_newmortal();
sv_setiv($result,(IV) *($1));
argvi++;
}
%typemap(java, in) enum SWIGTYPE *OUTENUM ($*1_type temp) {
$1 = ($1_ltype)&temp;
}
%typemap(python, argout, fragment="t_output_helper") enum SWIGTYPE *OUTENUM {
$result = t_output_helper($result, PyInt_FromLong(*$1));
}
/* -----------------------------------------------------------------------
Create a typemap for specifying string args that may be NULL.
*/
%typemap(python, in, parse="z") const char *MAY_BE_NULL "";
%typemap(java, in) const char *MAY_BE_NULL {
/* ### WHEN IS THIS USED? */
$1 = 0;
if ($input) {
$1 = ($1_ltype)JCALL2(GetStringUTFChars, jenv, $input, 0);
if (!$1) return $null;
}
}
#ifdef SWIGPERL
%apply const char * { const char *MAY_BE_NULL };
#endif
%typemap(perl5,out) svn_error_t * {
if ($1) {
SV *exception_handler = perl_get_sv ("SVN::Error::handler", FALSE);
if (SvOK(exception_handler)) {
SV *callback_result;
svn_swig_pl_callback_thunk (CALL_SV, exception_handler,
&callback_result, "S", $1,
$1_descriptor);
} else {
$result = sv_newmortal();
SWIG_MakePtr ($result, (void *)$1, $1_descriptor ,0);
argvi++;
}
}
}
/* -----------------------------------------------------------------------
Define a more refined 'varin' typemap for 'const char *' members. This
is used in place of the 'char *' handler defined automatically.
We need to do the free/malloc/strcpy special because of the const
*/
%typemap(memberin) const char * {
apr_size_t len = strlen($input) + 1;
char *copied;
if ($1) free((char *)$1);
copied = malloc(len);
memcpy(copied, $input, len);
$1 = copied;
}
/* -----------------------------------------------------------------------
Specify how svn_error_t returns are turned into exceptions.
*/
%typemap(python, out) svn_error_t * {
if ($1 != NULL) {
if ($1->apr_err != SVN_ERR_SWIG_PY_EXCEPTION_SET)
svn_swig_py_svn_exception($1);
else
svn_error_clear($1);
return NULL;
}
Py_INCREF(Py_None);
$result = Py_None;
}
%typemap(java, out) svn_error_t * %{
$result = ($1 != NULL) ? svn_swig_java_convert_error(jenv, $1) : NULL;
%}
%typemap(jni) svn_error_t * "jthrowable"
%typemap(jtype) svn_error_t * "org.tigris.subversion.SubversionException"
%typemap(jstype) svn_error_t * "org.tigris.subversion.SubversionException"
%typemap(javain) svn_error_t * "@javainput"
%typemap(javaout) svn_error_t * {
return $jnicall;
}
/* Make the proxy classes much more usable */
%typemap(javaptrconstructormodifiers) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [] "public"
/* -----------------------------------------------------------------------
'svn_revnum_t *' and 'svn_boolean_t *' will always be an OUTPUT parameter
*/
%apply long *OUTPUT { svn_revnum_t * };
%apply int *OUTPUT { svn_boolean_t * };
/* -----------------------------------------------------------------------
Define an OUTPUT typemap for 'svn_filesize_t *'. For now, we'll
treat it as a 'long' even if that isn't entirely correct...
*/
%typemap(python,in,numinputs=0) svn_filesize_t * (svn_filesize_t temp)
"$1 = &temp;";
%typemap(perl5,in,numinputs=0) svn_filesize_t * (svn_filesize_t temp)
"$1 = &temp;";
/* We have to use APR_INT64_T_FMT because SWIG won't convert the
SVN_FILESIZE_T_FMT to the actual value only APR_INT64_T_FMT */
#if APR_INT64_T_FMT == "ld"
%typemap(python,argout,fragment="t_output_helper") svn_filesize_t *
"$result = t_output_helper($result,PyLong_FromLong((long) (*$1)));";
%apply long *OUTPUT { svn_filesize_t * };
#else
%typemap(python,argout,fragment="t_output_helper") svn_filesize_t *
"$result = t_output_helper($result,
PyLong_FromLongLong((apr_int64_t) (*$1)));";
/* XXX: apply long long *OUTPUT doesn't track $1 correctly */
%typemap(perl5,argout) svn_filesize_t * {
char temp[256];
sprintf(temp,"%lld", *$1);
ST(argvi) = sv_newmortal();
sv_setpv((SV*)ST(argvi++), temp);
};
#endif
/* -----------------------------------------------------------------------
Define a general ptr/len typemap. This takes a single script argument
and expands it into a ptr/len pair for the native call.
*/
%typemap(python, in) (const char *PTR, apr_size_t LEN) {
if (!PyString_Check($input)) {
PyErr_SetString(PyExc_TypeError, "expecting a string");
return NULL;
}
$1 = PyString_AS_STRING($input);
$2 = PyString_GET_SIZE($input);
}
%typemap(java, in) (const char *PTR, apr_size_t LEN) (char c) {
if ($input != NULL) {
/* Do not use GetPrimitiveArrayCritical and ReleasePrimitiveArrayCritical
* since the Subversion client might block the thread */
$1 = JCALL2(GetByteArrayElements, jenv, $input, NULL);
$2 = JCALL1(GetArrayLength, jenv, $input);
}
else {
$1 = &c;
$2 = 0;
}
}
%typemap(java, freearg) (const char *PTR, apr_size_t LEN) {
if ($input != NULL) {
JCALL3(ReleaseByteArrayElements, jenv, $input, $1, JNI_ABORT);
}
/* Since this buffer is used as input JNI_ABORT is safe as "mode" above*/
}
%typemap(jni) (const char *PTR, apr_size_t LEN) "jbyteArray"
%typemap(jtype) (const char *PTR, apr_size_t LEN) "byte[]"
%typemap(jstype) (const char *PTR, apr_size_t LEN) "byte[]"
%typemap(javain) (const char *PTR, apr_size_t LEN) "$javainput"
%typemap(javaout) (const char *PTR, apr_size_t LEN) {
return $jnicall;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -