Add --lte-restrict-inst-closure option. Push dt.size fairness constraints inside...
[cvc5.git] / src / util / datatype.i
1 %{
2 #include "util/datatype.h"
3
4 #ifdef SWIGJAVA
5
6 #include "bindings/java_iterator_adapter.h"
7 #include "bindings/java_stream_adapters.h"
8
9 #endif /* SWIGJAVA */
10 %}
11
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 );
19 %ignore to_array();
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);
24 %ignore to_array();
25 };
26 %template(vectorDatatype) std::vector< CVC4::Datatype >;
27
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 );
35 %ignore to_array();
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);
40 %ignore to_array();
41 };
42 //%template(vectorDatatypeConstructor) std::vector< CVC4::DatatypeConstructor >;
43
44 %rename(equals) CVC4::Datatype::operator==(const Datatype&) const;
45 %ignore CVC4::Datatype::operator!=(const Datatype&) const;
46
47 %ignore CVC4::Datatype::begin();
48 %ignore CVC4::Datatype::end();
49 %ignore CVC4::Datatype::begin() const;
50 %ignore CVC4::Datatype::end() const;
51
52 %rename(get) CVC4::Datatype::operator[](size_t) const;
53 %rename(get) CVC4::Datatype::operator[](std::string) const;
54
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;
59
60 %ignore CVC4::DatatypeConstructor::begin();
61 %ignore CVC4::DatatypeConstructor::end();
62 %ignore CVC4::DatatypeConstructor::begin() const;
63 %ignore CVC4::DatatypeConstructor::end() const;
64
65 %rename(get) CVC4::DatatypeConstructor::operator[](size_t) const;
66 %rename(get) CVC4::DatatypeConstructor::operator[](std::string) const;
67
68 %ignore CVC4::operator<<(std::ostream&, const Datatype&);
69 %ignore CVC4::operator<<(std::ostream&, const DatatypeConstructor&);
70 %ignore CVC4::operator<<(std::ostream&, const DatatypeConstructorArg&);
71
72 %ignore CVC4::DatatypeConstructorIterator;
73 %ignore CVC4::DatatypeConstructorArgIterator;
74
75 %feature("valuewrapper") CVC4::DatatypeUnresolvedType;
76 %feature("valuewrapper") CVC4::DatatypeConstructor;
77
78 #ifdef SWIGJAVA
79
80 // Instead of Datatype::begin() and end(), create an
81 // iterator() method on the Java side that returns a Java-style
82 // Iterator.
83 %extend CVC4::Datatype {
84 CVC4::JavaIteratorAdapter<CVC4::Datatype> iterator() {
85 return CVC4::JavaIteratorAdapter<CVC4::Datatype>(*$self);
86 }
87
88 std::string toString() const {
89 std::stringstream ss;
90 ss << *$self;
91 return ss.str();
92 }
93 }
94 %extend CVC4::DatatypeConstructor {
95 CVC4::JavaIteratorAdapter<CVC4::DatatypeConstructor> iterator() {
96 return CVC4::JavaIteratorAdapter<CVC4::DatatypeConstructor>(*$self);
97 }
98
99 std::string toString() const {
100 std::stringstream ss;
101 ss << *$self;
102 return ss.str();
103 }
104 }
105 %extend CVC4::DatatypeConstructorArg {
106 std::string toString() const {
107 std::stringstream ss;
108 ss << *$self;
109 return ss.str();
110 }
111 }
112
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>";
116
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();
126 }
127
128 public DatatypeConstructor next() {
129 if(hasNext()) {
130 return getNext();
131 } else {
132 throw new java.util.NoSuchElementException();
133 }
134 }
135 "
136 %typemap(javacode) CVC4::JavaIteratorAdapter<CVC4::DatatypeConstructor> "
137 public void remove() {
138 throw new java.lang.UnsupportedOperationException();
139 }
140
141 public DatatypeConstructorArg next() {
142 if(hasNext()) {
143 return getNext();
144 } else {
145 throw new java.util.NoSuchElementException();
146 }
147 }
148 "
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";
152
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; }
162
163 #endif /* SWIGJAVA */
164
165 %include "util/datatype.h"
166
167 #ifdef SWIGJAVA
168
169 %include "bindings/java_iterator_adapter.h"
170 %include "bindings/java_stream_adapters.h"
171
172 %template(JavaIteratorAdapter_Datatype) CVC4::JavaIteratorAdapter<CVC4::Datatype>;
173 %template(JavaIteratorAdapter_DatatypeConstructor) CVC4::JavaIteratorAdapter<CVC4::DatatypeConstructor>;
174
175 #endif /* SWIGJAVA */