1 module wrap_all; 2 3 import templates2; 4 import impl: OtherString; 5 6 // should be registered in Python as identity_int 7 alias identityInt = identity!int; 8 9 int product(int i, int j) { 10 return i * j; 11 } 12 13 struct String { 14 string s; 15 this(string s) { this.s = s; } 16 } 17 18 19 string otherStringAsParam(OtherString s) { 20 return s.s ~ "quux"; 21 } 22 23 24 enum MyEnum { 25 foo, 26 bar, 27 baz, 28 } 29 30 31 // FIXME 32 // See https://github.com/symmetryinvestments/autowrap/issues/177 33 version(Have_autowrap_csharp) {} 34 else { 35 36 // mimics std.range.chain 37 auto mychain(Ranges...)(Ranges ranges) { 38 39 static struct Oops { 40 import std.meta: staticMap; 41 import std.traits: Unqual; 42 alias R = staticMap!(Unqual, Ranges); 43 } 44 45 return Oops(); 46 } 47 48 49 auto chainy() { 50 import std.range: iota; 51 return mychain(5.iota, 7.iota); 52 53 } 54 } 55 56 57 struct HasOnlyOpIndex { 58 bool opIndex(size_t i) @safe @nogc pure nothrow const { 59 return i == 42; 60 } 61 } 62 63 64 extern(C) int mysend(int, const(void)* ptr, ulong length, int index) { 65 auto bytes = cast(ubyte*) ptr; 66 if(index > length) throw new Exception("index cannot be more than length"); 67 return cast(int) bytes[index]; 68 69 } 70 71 static if(!is(typeof(GLOBAL_INT_ENUM))) { 72 enum GLOBAL_INT_ENUM = 42; 73 } 74 75 76 static if(!is(typeof(GLOBAL_STRING_ENUM))) { 77 enum GLOBAL_STRING_ENUM = "quux"; 78 } 79 80 enum GLOBAL_EMPTY_STRING_ENUM = ""; 81 82 const(char)* intToString(int i) { 83 import std.conv: text; 84 import std..string: toStringz; 85 return i.text.toStringz; 86 } 87 88 89 // FIXME 90 version(Have_autowrap_csharp) {} 91 else { 92 class ImmutableFields { 93 this(string name) { this.name = name; } 94 immutable string name; 95 } 96 }