/*
* Copyright (c) 2010-2012 Zmanda, Inc. All Rights Reserved.
* Copyright (c) 2013-2016 Carbonite, Inc. All Rights Reserved.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Contact information: Carbonite Inc., 756 N Pastoria Ave
* Sunnyvale, CA 94085, or: http://www.zmanda.com
*/
%module "Amanda::Feature"
%include "amglue/amglue.swg"
%include "exception.i"
%include "Amanda/Feature.pod"
%{
#include "amfeatures.h"
%}
/* include the header file directly - this saves us having to remember
* to add new constants to both places */
#define AMANDA_FEATURE_SWG
%include "../common-src/amfeatures.h"
%{
typedef am_feature_t Set;
%}
typedef struct {
%extend {
~Set() {
am_release_feature_set(self);
}
void add(int feature) {
am_add_feature(self, feature);
}
void remove(int feature) {
am_remove_feature(self, feature);
}
int has(int feature) {
return am_has_feature(self, feature);
}
%newobject as_string;
char *as_string() {
return am_feature_to_string(self);
}
};
} Set;
%newobject am_string_to_feature;
extern Set *am_string_to_feature(char *s);
%newobject am_set_default_feature_set;
extern Set *am_set_default_feature_set(void);
%newobject am_init_feature_set;
extern Set *am_init_feature_set();
%newobject features;
extern am_feature_t *am_features(Set *);
%perlcode %{
package Amanda::Feature::Set;
# this does not work, because SWIG uses the string value of objects as a hash key
# even after calling their destructor, which leads to a segfault.
#
# use overload '""' => sub { $_[0]->as_string(); };
sub Amanda::Feature::Set::from_string {
my $class = shift;
return Amanda::Feature::am_string_to_feature(@_);
}
sub Amanda::Feature::Set::old {
my $class = shift;
return Amanda::Feature::am_set_default_feature_set();
}
sub Amanda::Feature::Set::mine {
my $class = shift;
return Amanda::Feature::am_init_feature_set();
}
sub Amanda::Feature::Set::features {
my $class = shift;
return Amanmda::Feature::features();
}
package Amanda::Feature;
%}