From 00e26c8dbc3772dd0e7bb24be467603f4f4ed53e Mon Sep 17 00:00:00 2001 From: Alexey Sokolov Date: Mon, 23 Jan 2012 04:09:24 +0700 Subject: [PATCH] Perl: fix several methods to return perl stuff instead of pointers. --- modules/modperl/modperl.i | 47 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/modules/modperl/modperl.i b/modules/modperl/modperl.i index 87a284b3..dfb06db8 100644 --- a/modules/modperl/modperl.i +++ b/modules/modperl/modperl.i @@ -76,6 +76,22 @@ namespace std { argvi++; } +%template(VIRCNetworks) std::vector; +%template(VChannels) std::vector; +/*%template(MNicks) std::map;*/ + +%typemap(out) std::map { + HV* myhv = newHV(); + for (std::map::const_iterator i = $1.begin(); i != $1.end(); ++i) { + SV* val = SWIG_NewInstanceObj(const_cast(&i->second), SWIG_TypeQuery("CNick*"), SWIG_SHADOW); + SvREFCNT_inc(val);// it was created mortal + hv_store(myhv, i->first.c_str(), i->first.length(), val, 0); + } + $result = newRV_noinc((SV*)myhv); + sv_2mortal($result); + argvi++; +} + #define u_short unsigned short #define u_int unsigned int #include "../include/znc/ZNCString.h" @@ -162,6 +178,24 @@ namespace std { } } +%extend CUser { + std::vector GetNetworks_() { + return $self->GetNetworks(); + } +} + +%extend CIRCNetwork { + std::vector GetChans_() { + return $self->GetChans(); + } +} + +%extend CChan { + std::map GetNicks_() { + return $self->GetNicks(); + } +} + /* Web */ %template(StrPair) pair; @@ -215,6 +249,19 @@ typedef vector > VPair; *HALTMODS = *ZNC::CModule::HALTMODS; *HALTCORE = *ZNC::CModule::HALTCORE; *UNLOAD = *ZNC::CModule::UNLOAD; + + package ZNC::CIRCNetwork; + *GetChans = *GetChans_; + + package ZNC::CUser; + *GetNetworks = *GetNetworks_; + + package ZNC::CChan; + sub _GetNicks_ { + my $result = GetNicks_(@_); + return %$result; + } + *GetNicks = *_GetNicks_; %} /* vim: set filetype=cpp noexpandtab: */