SdkTests/Native/Functions/Functions.cpp (220 lines of code) (raw):

#include "Functions.h" class Implementation : public Interface { void Method() {} }; DECL(void) GetInterfaces(int numInstances, Interface** results) { for (int i = 0; i < numInstances; ++i) { results[i] = new Implementation(); } } DECL(void) GetInterfacesOptional(int numInstances, Interface** results) { if (results != nullptr) { GetInterfaces(numInstances, results); } } DECL(void) GetIntArray(int numInts, int* results) { for (int i = 0; i < numInts; ++i) { results[i] = i; } } DECL(wchar_t) GetFirstCharacter(wchar_t* string) { return string[0]; } DECL(char) GetFirstAnsiCharacter(char* string) { return string[0]; } DECL(void) BoolToIntTest(int in, int* out) { *out = in; } DECL(void) BoolArrayTest(bool* in, bool* out, int numElements) { for (int i = 0; i < numElements; ++i) { out[i] = in[i]; } } DECL(void) StructMarshalling(StructWithMarshal in, StructWithStaticMarshal inStatic, StructWithMarshal* out, StructWithStaticMarshal* outStatic) { *out = in; *outStatic = inStatic; } DECL(void) StructArrayMarshalling(StructWithMarshal in[1], StructWithStaticMarshal inStatic[1], StructWithMarshal out[1], StructWithStaticMarshal outStatic[1]) { out[0] = in[0]; outStatic[0] = inStatic[0]; } DECL(void) SetAllElements(StructWithMarshal* ref) { ref->i[0] = 10; ref->i[1] = 10; ref->i[2] = 10; } DECL(int) FirstElementOrZero(StructWithMarshal* ref) { if (ref != nullptr) { return ref->i[0]; } return 0; } DECL(void) FastOutTest(Interface** out) { *out = new Implementation(); } DECL(MyEnum) PassThroughEnum(MyEnum testEnum) { return testEnum; } DECL(void) Increment(int* cell) { (*cell)++; } DECL(int) Add(int* lhs, int* rhs_opt) { if (rhs_opt != nullptr) { return *lhs + *rhs_opt; } return *lhs; } DECL(const char*) GetName() { return "Functions"; } DECL(int) Sum(int numElements, SimpleStruct elements[]) { int sum = 0; if (elements == nullptr) { return sum; } for (int i = 0; i < numElements; ++i) { sum += elements[i].i; } return sum; } DECL(int) Product(int numElements, SimpleStruct elements[]) { int product = 1; for (int i = 0; i < numElements; ++i) { product *= elements[i].i; } return product; } DECL(long long) SumValues(LargeStruct val) { return val.i[0] + val.i[1] + val.i[2]; } DECL(PointerSize) PassThroughPointerSize(PointerSize param) { return param; } DECL(void) StructArrayOut(StructWithMarshal in, StructWithMarshal out[]) { if (out != nullptr) { out[0] = in; } } DECL(int) SumInner(StructAsClass test[], int length) { int sum = 0; for (int i = 0; i < length; i++) { sum += test[i].i; } return sum; } DECL(void) AddOne(SimpleStruct* param) { if(param != nullptr) param->i++; } DECL(void) EnumOut(MyEnum *enumOut) { *enumOut = TestValue; } DECL(MyEnum) FirstEnumElement(MyEnum test[]) { return test[0]; } DECL(int) ArrayRelationSum(int length, SimpleStruct elements[]) { return Sum(length, elements); } DECL(void) ArrayRelationOutInitBoolArray(bool out[], int length) { for(size_t i = 0; i < length; i++) { out[i] = true; } } DECL(void) ArrayRelationOutGetInterfacesWithRelation(int length, Interface** array) { GetInterfaces(length, array); } DECL(void) ArrayRelationInInterfaceArray(int length, Interface* array[]) { for(size_t i = 0; i < length; i++) { array[i]->Method(); } } DECL(int) ArrayRelationSumStructWithMarshal(int length, StructWithMarshal array[]) { int sum = 0; for(size_t i = 0; i < length; i++) { for(size_t j = 0; j < 3; j++) { sum += array[i].i[j]; } } return sum; } DECL(bool) VerifyReservedParam(int reserved) { return reserved == 42; } DECL(bool) PreserveVoidPointer1_None(void* array) { int* v = (int*)array; return *v == 42; } DECL(bool) PreserveVoidPointer1_False(void* array) { int* v = (int*)array; return *v == 42; } DECL(bool) PreserveVoidPointer1_True(void* array) { int* v = (int*)array; return *v == 42; } DECL(bool) PreserveVoidPointer2_None(void* array) { return (size_t) array == 42u; } DECL(bool) PreserveVoidPointer2_False(void* array) { return (size_t) array == 42u; } DECL(bool) PreserveVoidPointer2_True(void* array) { return (size_t) array == 42u; } DECL(StructAsClassWrapper) GetWrapper() { return {{1}}; }