2 #include "util/datatype.h"
6 #include "bindings/java_iterator_adapter.h"
7 #include "bindings/java_stream_adapters.h"
12 %extend std::vector< CVC4::Datatype > {
13 /* These member functions have slightly different signatures in
14 * different swig language packages. The underlying issue is that
15 * DatatypeConstructor doesn't have a default constructor */
16 #if defined(SWIGOCAML) || defined(SWIGPERL) || defined(SWIGTCL)
17 %ignore vector(unsigned int size = 0);
18 %ignore set( int i, const CVC4::Datatype &x );
20 #endif /* SWIGOCAML || SWIGPERL || SWIGTCL */
21 %ignore vector(size_type);// java/python/perl/others?
22 %ignore resize(size_type);// java/python/perl/others?
23 %ignore set(int i, const CVC4::Datatype& x);
26 %template(vectorDatatype) std::vector< CVC4::Datatype >;
28 %extend std::vector< CVC4::DatatypeConstructor > {
29 /* These member functions have slightly different signatures in
30 * different swig language packages. The underlying issue is that
31 * DatatypeConstructor doesn't have a default constructor */
32 #if defined(SWIGOCAML) || defined(SWIGPERL) || defined(SWIGTCL)
33 %ignore vector(unsigned int size = 0);
34 %ignore set( int i, const CVC4::DatatypeConstructor &x );
36 #endif /* SWIGOCAML || SWIGPERL || SWIGTCL */
37 %ignore vector(size_type);// java/python/perl/others?
38 %ignore resize(size_type);// java/python/perl/others?
39 %ignore set(int i, const CVC4::Datatype::Constructor& x);
42 //%template(vectorDatatypeConstructor) std::vector< CVC4::DatatypeConstructor >;
44 %rename(equals) CVC4::Datatype::operator==(const Datatype&) const;
45 %ignore CVC4::Datatype::operator!=(const Datatype&) const;
47 %ignore CVC4::Datatype::begin();
48 %ignore CVC4::Datatype::end();
49 %ignore CVC4::Datatype::begin() const;
50 %ignore CVC4::Datatype::end() const;
52 %rename(get) CVC4::Datatype::operator[](size_t) const;
53 %rename(get) CVC4::Datatype::operator[](std::string) const;
55 %rename(apply) CVC4::DatatypeHashFunction::operator()(const Datatype&) const;
56 %ignore CVC4::DatatypeHashFunction::operator()(const Datatype*) const;
57 %rename(apply) CVC4::DatatypeHashFunction::operator()(const DatatypeConstructor&) const;
58 %ignore CVC4::DatatypeHashFunction::operator()(const DatatypeConstructor*) const;
60 %ignore CVC4::DatatypeConstructor::begin();
61 %ignore CVC4::DatatypeConstructor::end();
62 %ignore CVC4::DatatypeConstructor::begin() const;
63 %ignore CVC4::DatatypeConstructor::end() const;
65 %rename(get) CVC4::DatatypeConstructor::operator[](size_t) const;
66 %rename(get) CVC4::DatatypeConstructor::operator[](std::string) const;
68 %ignore CVC4::operator<<(std::ostream&, const Datatype&);
69 %ignore CVC4::operator<<(std::ostream&, const DatatypeConstructor&);
70 %ignore CVC4::operator<<(std::ostream&, const DatatypeConstructorArg&);
72 %ignore CVC4::DatatypeConstructorIterator;
73 %ignore CVC4::DatatypeConstructorArgIterator;
75 %feature("valuewrapper") CVC4::DatatypeUnresolvedType;
76 %feature("valuewrapper") CVC4::DatatypeConstructor;
80 // Instead of Datatype::begin() and end(), create an
81 // iterator() method on the Java side that returns a Java-style
83 %extend CVC4::Datatype {
84 CVC4::JavaIteratorAdapter<CVC4::Datatype> iterator() {
85 return CVC4::JavaIteratorAdapter<CVC4::Datatype>(*$self);
88 std::string toString() const {
94 %extend CVC4::DatatypeConstructor {
95 CVC4::JavaIteratorAdapter<CVC4::DatatypeConstructor> iterator() {
96 return CVC4::JavaIteratorAdapter<CVC4::DatatypeConstructor>(*$self);
99 std::string toString() const {
100 std::stringstream ss;
105 %extend CVC4::DatatypeConstructorArg {
106 std::string toString() const {
107 std::stringstream ss;
113 // Datatype is "iterable" on the Java side
114 %typemap(javainterfaces) CVC4::Datatype "java.lang.Iterable<DatatypeConstructor>";
115 %typemap(javainterfaces) CVC4::DatatypeConstructor "java.lang.Iterable<DatatypeConstructorArg>";
117 // the JavaIteratorAdapter should not be public, and implements Iterator
118 %typemap(javaclassmodifiers) CVC4::JavaIteratorAdapter<CVC4::Datatype> "class";
119 %typemap(javaclassmodifiers) CVC4::JavaIteratorAdapter<CVC4::DatatypeConstructor> "class";
120 %typemap(javainterfaces) CVC4::JavaIteratorAdapter<CVC4::Datatype> "java.util.Iterator<DatatypeConstructor>";
121 %typemap(javainterfaces) CVC4::JavaIteratorAdapter<CVC4::DatatypeConstructor> "java.util.Iterator<DatatypeConstructorArg>";
122 // add some functions to the Java side (do it here because there's no way to do these in C++)
123 %typemap(javacode) CVC4::JavaIteratorAdapter<CVC4::Datatype> "
124 public void remove() {
125 throw new java.lang.UnsupportedOperationException();
128 public DatatypeConstructor next() {
132 throw new java.util.NoSuchElementException();
136 %typemap(javacode) CVC4::JavaIteratorAdapter<CVC4::DatatypeConstructor> "
137 public void remove() {
138 throw new java.lang.UnsupportedOperationException();
141 public DatatypeConstructorArg next() {
145 throw new java.util.NoSuchElementException();
149 // getNext() just allows C++ iterator access from Java-side next(), make it private
150 %javamethodmodifiers CVC4::JavaIteratorAdapter<CVC4::Datatype>::getNext() "private";
151 %javamethodmodifiers CVC4::JavaIteratorAdapter<CVC4::DatatypeConstructor>::getNext() "private";
153 // map the types appropriately.
154 %typemap(jni) CVC4::Datatype::iterator::value_type "jobject";
155 %typemap(jtype) CVC4::Datatype::iterator::value_type "edu.nyu.acsys.CVC4.DatatypeConstructor";
156 %typemap(jstype) CVC4::Datatype::iterator::value_type "edu.nyu.acsys.CVC4.DatatypeConstructor";
157 %typemap(javaout) CVC4::Datatype::iterator::value_type { return $jnicall; }
158 %typemap(jni) CVC4::DatatypeConstructor::iterator::value_type "jobject";
159 %typemap(jtype) CVC4::DatatypeConstructor::iterator::value_type "edu.nyu.acsys.CVC4.DatatypeConstructorArg";
160 %typemap(jstype) CVC4::DatatypeConstructor::iterator::value_type "edu.nyu.acsys.CVC4.DatatypeConstructorArg";
161 %typemap(javaout) CVC4::DatatypeConstructor::iterator::value_type { return $jnicall; }
163 #endif /* SWIGJAVA */
165 %include "util/datatype.h"
169 %include "bindings/java_iterator_adapter.h"
170 %include "bindings/java_stream_adapters.h"
172 %template(JavaIteratorAdapter_Datatype) CVC4::JavaIteratorAdapter<CVC4::Datatype>;
173 %template(JavaIteratorAdapter_DatatypeConstructor) CVC4::JavaIteratorAdapter<CVC4::DatatypeConstructor>;
175 #endif /* SWIGJAVA */