📄 svn_types.i
字号:
}
%typemap(perl5, in) (const char *PTR, apr_size_t LEN) {
if (SvPOK($input)) {
$1 = SvPV($input, $2);
} else {
/* set to 0 to avoid warning */
$1 = 0;
$2 = 0;
SWIG_croak("Expecting a string");
}
}
/* ---------------------------------------------------------------------------------
Handle retrieving the error message from svn_strerror
*/
%typemap(perl5,in,numinputs=0) (char *buf, apr_size_t bufsize) ( char temp[128] ) {
memset (temp,0,128); /* paranoia */
$1 = temp;
$2 = 128;
}
/* -----------------------------------------------------------------------
Define a generic arginit mapping for pools.
*/
%typemap(python, arginit) apr_pool_t *pool(apr_pool_t *_global_pool) {
/* Assume that the pool here is the last argument in the list */
SWIG_ConvertPtr(PyTuple_GET_ITEM(args, PyTuple_GET_SIZE(args) - 1),
(void **)&$1, $1_descriptor, SWIG_POINTER_EXCEPTION | 0);
_global_pool = $1;
}
%typemap(perl5, in) apr_pool_t *pool "";
%typemap(perl5, default) apr_pool_t *pool(apr_pool_t *_global_pool) {
_global_pool = $1 = svn_swig_pl_make_pool (ST(items-1));
}
#ifdef SWIGPERL
%apply apr_pool_t *pool {
apr_pool_t *dir_pool,
apr_pool_t *file_pool,
apr_pool_t *node_pool
};
#endif
%typemap(java, arginit) apr_pool_t *pool(apr_pool_t *_global_pool) {
/* ### HACK: Get the input variable based on naming convention */
_global_pool = *(apr_pool_t **)&j$1;
$1 = 0;
}
/* -----------------------------------------------------------------------
result of check_path
*/
%apply enum SWIGTYPE *OUTENUM { svn_node_kind_t * };
/* -----------------------------------------------------------------------
get_logs takes a callback function, so we have to thunk it
*/
%typemap(python, in) (svn_log_message_receiver_t receiver,
void *receiver_baton) {
$1 = svn_swig_py_log_receiver;
$2 = (void *)$input;
}
%typemap(perl5, in) (svn_log_message_receiver_t receiver,
void *receiver_baton) {
$1 = svn_swig_pl_thunk_log_receiver;
$2 = (void *)$input;
}
/* stream_t * */
%apply SWIGTYPE **OUTPARAM { svn_stream_t ** };
/* -----------------------------------------------------------------------
thunk commit_callback
*/
%typemap(perl5, in) (svn_commit_callback_t callback, void *callback_baton) {
$1 = svn_swig_pl_thunk_commit_callback;
$2 = (void *)$input;
svn_swig_pl_hold_ref_in_pool (_global_pool, $input);
};
/* -----------------------------------------------------------------------
svn_stream interpolability with io handle
*/
%typemap(perl5, in) svn_stream_t * {
svn_swig_pl_make_stream (&$1, $input);
}
%typemap(perl5, out) svn_stream_t * {
$result = svn_swig_pl_from_stream ($1);
argvi++;
}
%typemap(perl5, argout) svn_stream_t ** {
$result = svn_swig_pl_from_stream (*$1);
argvi++;
}
/* -----------------------------------------------------------------------
Wrap the digest output for functions populating digests.
*/
%typemap(perl5, in, numinputs=0) unsigned char digest[ANY] ($*1_type temp[33]) {
$1 = ($1_ltype)temp;
}
%typemap(perl5, argout) unsigned char digest[ANY] {
ST(argvi) = sv_newmortal();
sv_setpv((SV*)ST(argvi++), svn_md5_digest_to_cstring ($1,_global_pool));
}
#ifdef SWIGPERL
%apply unsigned char digest[ANY] { unsigned char *digest };
#endif
/* -----------------------------------------------------------------------
useful convertors for svn_opt_revision_t
*/
%typemap(perl5, in) svn_opt_revision_t * (svn_opt_revision_t rev) {
$1 = &rev;
if ($input == NULL || $input == &PL_sv_undef || !SvOK($input)) {
rev.kind = svn_opt_revision_unspecified;
}
else if (sv_isobject($input) && sv_derived_from($input, "_p_svn_opt_revision_t")) {
SWIG_ConvertPtr($input, (void **)&$1, $1_descriptor, 0);
}
else if (looks_like_number($input)) {
rev.kind = svn_opt_revision_number;
rev.value.number = SvIV($input);
}
else if (SvPOK($input)) {
char *input = SvPV_nolen($input);
if (strcasecmp(input, "BASE") == 0)
rev.kind = svn_opt_revision_base;
else if (strcasecmp(input, "HEAD") == 0)
rev.kind = svn_opt_revision_head;
else if (strcasecmp(input, "WORKING") == 0)
rev.kind = svn_opt_revision_working;
else if (strcasecmp(input, "COMMITTED") == 0)
rev.kind = svn_opt_revision_committed;
else if (strcasecmp(input, "PREV") == 0)
rev.kind = svn_opt_revision_previous;
else if (*input == '{') {
svn_boolean_t matched;
apr_time_t tm;
svn_error_t *err;
char *end = strchr(input,'}');
if (!end)
SWIG_croak("unknown opt_revision_t type");
*end = '\0';
err = svn_parse_date (&matched, &tm, input + 1, apr_time_now(),
svn_swig_pl_make_pool ((SV *)NULL));
if (err) {
svn_error_clear (err);
SWIG_croak("unknown opt_revision_t type");
}
if (!matched)
SWIG_croak("unknown opt_revision_t type");
rev.kind = svn_opt_revision_date;
rev.value.date = tm;
} else
SWIG_croak("unknown opt_revison_t type");
} else
SWIG_croak("unknown opt_revision_t type");
}
/* -----------------------------------------------------------------------
dirents hash
*/
%typemap(python,in,numinputs=0) apr_hash_t **dirents = apr_hash_t **OUTPUT;
%typemap(python,argout,fragment="t_output_helper") apr_hash_t **dirents {
$result = t_output_helper
($result,
svn_swig_py_convert_hash(*$1, SWIG_TypeQuery("svn_dirent_t *")));
}
%typemap(perl5,in,numinputs=0) apr_hash_t **dirents = apr_hash_t **OUTPUT;
%typemap(perl5,argout) apr_hash_t **dirents {
ST(argvi++) = svn_swig_pl_convert_hash
(*$1, SWIG_TypeQuery("svn_dirent_t *"));
}
/* -----------------------------------------------------------------------
Special boolean mapping for java.
*/
%typemap(java, jni) svn_boolean_t "jboolean";
%typemap(java, jtype) svn_boolean_t "boolean";
%typemap(java, jstype) svn_boolean_t "boolean";
%typemap(java, in) svn_boolean_t %{
$1 = $input ? TRUE : FALSE;
%}
%typemap(java, out) svn_boolean_t %{
$result = $1 ? JNI_TRUE : JNI_FALSE;
%}
/* -----------------------------------------------------------------------
Handle python thread locking.
Swig doesn't allow us to specify a language in the %exception command,
so we have to use #ifdefs for the python-specific parts.
*/
%exception {
#ifdef SWIGPYTHON
svn_swig_py_release_py_lock();
#endif
$action
#ifdef SWIGPYTHON
svn_swig_py_acquire_py_lock();
#endif
}
/* ----------------------------------------------------------------------- */
%include svn_types.h
%{
#include "svn_types.h"
#include "svn_time.h"
#ifdef SWIGPYTHON
#include "swigutil_py.h"
#endif
#ifdef SWIGJAVA
#include "swigutil_java.h"
#endif
#ifdef SWIGPERL
#include "swigutil_pl.h"
#endif
%}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -