blob: 26cb6aeebb7d9a1fe80c5ff6c7440164c5247223 [file] [log] [blame]
%module types_directive
#if defined(SWIGR)
// Avoid conflict with Date class in R
#define Date DateSwig
%inline %{
#define Date DateSwig
%}
#endif
%ignore Time2::operator Date *;
%inline %{
struct Date {
Date(unsigned int year, unsigned int month, unsigned int day) : year(year), month(month), day(day) {}
unsigned int year;
unsigned int month;
unsigned int day;
};
struct Time1 {
Time1(unsigned int year, unsigned int month, unsigned int day, unsigned int seconds) : date(year, month, day), seconds(seconds) {}
Date &dateFromTime() {
return date;
}
Date date;
unsigned int seconds;
};
struct Time2 {
Time2(unsigned int year, unsigned int month, unsigned int day, unsigned int seconds) : date(year, month, day), seconds(seconds) {}
operator Date *() {
return &date;
}
Date date;
unsigned int seconds;
};
Date add(const Date &date, unsigned int days) {
Date newDate = date;
newDate.day += days;
return newDate;
}
%}
// allow conversion from Date -> Time1 using the following code
%types(Time1 = Date) %{
Time1 *t = (Time1 *)$from;
Date &d = t->dateFromTime();
return (void *) &d;
%}
// allow conversion from Date -> Time2 using conversion operator (cast) in Time2
%types(Time2 = Date);