summaryrefslogtreecommitdiff
path: root/pikul.i
diff options
context:
space:
mode:
Diffstat (limited to 'pikul.i')
-rw-r--r--pikul.i21
1 files changed, 21 insertions, 0 deletions
diff --git a/pikul.i b/pikul.i
index 05b45c9..69f582a 100644
--- a/pikul.i
+++ b/pikul.i
@@ -18,6 +18,27 @@
free($1);
}
+%typemap(in) char **[] {
+ AV *tempav = (AV *)SvRV($input);
+ I32 len = av_len(tempav);
+ $1 = (char ***)malloc((len + 2) * sizeof(char **));
+ int i;
+ for (i = 0; i <= len; i++) {
+ AV *av = (AV *)av_fetch(tempav, i, 0);
+ I32 avlen = av_len(av);
+ $1[i] = (char **)malloc((avlen + 2) * sizeof(char *));
+ int j;
+ for (j = 0; j <= avlen; j++) {
+ SV **tv = av_fetch(av, j, 0);
+ $1[i][j] = (char *)SvPV(*tv, PL_na);
+ }
+ $1[i][j] = NULL;
+ }
+};
+%typemap(freearg) char **[] {
+ free($1);
+}
+
%rename("%(strip:[pikul_])s") "";
void pikul_init(enum pikul_company company, char *provisions[]);
double pikul_cost(const char *origin, const char *destination, double weight, const char *service);