File: 07typemap_multi.t

package info (click to toggle)
libinline-perl 0.46-1
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 620 kB
  • ctags: 122
  • sloc: perl: 3,817; makefile: 2
file content (67 lines) | stat: -rw-r--r-- 1,298 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
use File::Spec;
use lib (File::Spec->catdir(File::Spec->updir(),'blib','lib'), File::Spec->catdir(File::Spec->curdir(),'blib','lib'));
use strict;
use Test;
use diagnostics;
use Inline Config => DIRECTORY => '_Inline_test';

plan(tests => 3,
     todo => [],
     onfail => sub {},
    );


my $obj = Soldier->new('Benjamin', 'Private', 11111);

ok($obj->get_serial == 11111);
ok($obj->get_name eq 'Benjamin');
ok($obj->get_rank eq 'Private');
    
package Soldier;

use Inline C => Config =>
    USING => 'ParseRegExp',
    TYPEMAPS => ['t/typemap', 't/soldier_typemap'];

use Inline C => <<'END';
    
typedef struct {
  char* name;
  char* rank;
  long  serial;
  } Soldier;
 

   
Soldier * new(char* class, char* name, char* rank, long serial) {
    Soldier* soldier;
    New(42, soldier, 1, Soldier);

    soldier->name = savepv(name);
    soldier->rank = savepv(rank);
    soldier->serial = serial;

    return soldier;
}
 
   
char* get_name(Soldier * obj) {
      return obj->name;
}
    
char* get_rank(Soldier * obj) {
      return obj->rank;
}
    
long get_serial(Soldier * obj) {
     return obj->serial;
}

void DESTROY(Soldier* obj) {
     Safefree(obj->name);
     Safefree(obj->rank);
     Safefree(obj);
}

END