]> git.gag.com Git - debian/amanda/blobdiff - perl/Amanda/Feature.swg
Merge branch 'master' into squeeze
[debian/amanda] / perl / Amanda / Feature.swg
diff --git a/perl/Amanda/Feature.swg b/perl/Amanda/Feature.swg
new file mode 100644 (file)
index 0000000..a66f39a
--- /dev/null
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2010 Zmanda, 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 version 2 as published
+ * by the Free Software Foundation.
+ *
+ * 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: Zmanda Inc., 465 S. Mathilda Ave., Suite 300
+ * Sunnyvale, CA 94085, USA, 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;
+
+%}