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
|
%module memberin1
%{
class String {
private:
char *str;
public:
// Constructor
String(const char *s = 0) : str(0) {
if (s != 0) {
str = new char[strlen(s) + 1];
strcpy(str, s);
}
}
// Copy constructor
String(const String& other) {
delete [] str;
str = 0;
if (other.str != 0) {
str = new char[strlen(other.str) + 1];
strcpy(str, other.str);
}
}
// Assignment operator
String& operator=(const String& other) {
if (&other != this) {
delete [] str;
str = 0;
if (other.str != 0) {
str = new char[strlen(other.str) + 1];
strcpy(str, other.str);
}
}
return *this;
}
// String contents
const char *c_str() const { return str; }
// Destructor
~String() { delete [] str; }
};
%}
#ifdef SWIGRUBY
%typemap(in) String {
Check_Type($input, T_STRING);
$1 = String(StringValuePtr($input));
}
#endif
%typemap(memberin) String {
$1 = $input;
}
%inline %{
struct Person {
String name;
};
%}
|