summaryrefslogtreecommitdiff
path: root/Lib/typemaps/std_strings.swg
diff options
context:
space:
mode:
authorMarcelo Matus <mmatus@acms.arizona.edu>2005-10-24 14:59:05 +0000
committerMarcelo Matus <mmatus@acms.arizona.edu>2005-10-24 14:59:05 +0000
commit3c65cea431715a5942e729c510f3e02ac5c35e61 (patch)
treebe33a88ec23740caf9c1b010ec268a0472868247 /Lib/typemaps/std_strings.swg
parent733d3388620de44c41d80d376eb9bf4cc955fee4 (diff)
downloadswig-3c65cea431715a5942e729c510f3e02ac5c35e61.tar.gz
Perl added to the Unified typemap library, cleaner way to use the library, and 'normalized' macro names
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@7707 626c5289-ae23-0410-ae9c-e8d60b6d4f22
Diffstat (limited to 'Lib/typemaps/std_strings.swg')
-rw-r--r--Lib/typemaps/std_strings.swg65
1 files changed, 65 insertions, 0 deletions
diff --git a/Lib/typemaps/std_strings.swg b/Lib/typemaps/std_strings.swg
new file mode 100644
index 000000000..ddba34b1f
--- /dev/null
+++ b/Lib/typemaps/std_strings.swg
@@ -0,0 +1,65 @@
+
+/* defining the String asptr/from methods */
+
+%define %std_string_asptr(String, Char, SWIG_AsCharPtrAndSize, Frag)
+%fragment(SWIG_AsPtr_frag(String),"header",fragment=Frag) {
+SWIGINTERN int
+SWIG_AsPtr_dec(String)(SWIG_Object obj, String **val)
+{
+ static swig_type_info* string_info = SWIG_TypeQuery(#String " *");
+ String *vptr;
+ if (SWIG_ConvertPtr(obj, (void**)&vptr, string_info, 0) != -1) {
+ if (val) *val = vptr;
+ return SWIG_OLDOBJ;
+ } else {
+ Char* buf = 0 ; size_t size = 0; int alloc = SWIG_OLDOBJ;
+ if (SWIG_AsCharPtrAndSize(obj, &buf, &size, &alloc) == SWIG_OK) {
+ if (buf) {
+ if (val) *val = new String(buf, size - 1);
+ if (alloc == SWIG_NEWOBJ) %delete_array(buf);
+ return SWIG_NEWOBJ;
+ }
+ }
+ return 0;
+ }
+}
+}
+%enddef
+
+%define %std_string_from(String, SWIG_FromCharPtrAndSize, Frag)
+%fragment(SWIG_From_frag(String),"header",fragment=Frag) {
+SWIGINTERNINLINE SWIG_Object
+SWIG_From_dec(String)(const String& s)
+{
+ return SWIG_FromCharPtrAndSize(s.data(), s.size());
+}
+}
+%enddef
+
+%define %std_string_asval(String)
+%fragment(SWIG_AsVal_frag(String),"header", fragment=SWIG_AsPtr_frag(String)) {
+SWIGINTERN int
+SWIG_AsVal_dec(String)(SWIG_Object obj, String *val)
+{
+ String* s;
+ int res = SWIG_AsPtr(String)(obj, &s);
+ if ((res != 0) && s) {
+ if (val) *val = *s;
+ if (res == SWIG_NEWOBJ) delete s;
+ return SWIG_OK;
+ }
+ return SWIG_TypeError;
+}
+}
+%enddef
+
+
+%define %typemaps_std_string(String, Char, AsPtrMethod, FromMethod, CheckCode)
+
+%std_string_asptr(String, Char, AsPtrMethod, #AsPtrMethod)
+%std_string_asval(String)
+%std_string_from(String, FromMethod, #FromMethod)
+
+%typemaps_asptrfromn(%arg(CheckCode), String);
+
+%enddef