diff --git a/example/generated-src/objc/TXSSortItems+Private.mm b/example/generated-src/objc/TXSSortItems+Private.mm index 548b73c3b..e9a564527 100644 --- a/example/generated-src/objc/TXSSortItems+Private.mm +++ b/example/generated-src/objc/TXSSortItems+Private.mm @@ -5,9 +5,9 @@ #import "TXSSortItems.h" #import "DJICppWrapperCache+Private.h" #import "DJIError.h" -#import "DJIMarshal+Private.h" #import "TXSItemList+Private.h" #import "TXSSortItems+Private.h" +#import "TXSSortOrder+Private.h" #import "TXSTextboxListener+Private.h" #include #include diff --git a/example/generated-src/objc/TXSSortOrder+Private.h b/example/generated-src/objc/TXSSortOrder+Private.h new file mode 100644 index 000000000..df2a08421 --- /dev/null +++ b/example/generated-src/objc/TXSSortOrder+Private.h @@ -0,0 +1,6 @@ +// AUTOGENERATED FILE - DO NOT MODIFY! +// This file generated by Djinni from example.djinni + +#include "sort_order.hpp" +#import "DJIMarshal+Private.h" + diff --git a/src/.idea/encodings.xml b/src/.idea/encodings.xml index e206d70d8..f75895965 100644 --- a/src/.idea/encodings.xml +++ b/src/.idea/encodings.xml @@ -1,5 +1,6 @@ - - - + + + + \ No newline at end of file diff --git a/src/.idea/sbt.xml b/src/.idea/sbt.xml index 86e0431a5..f79f3f84a 100644 --- a/src/.idea/sbt.xml +++ b/src/.idea/sbt.xml @@ -13,6 +13,12 @@ diff --git a/src/.idea/vcs.xml b/src/.idea/vcs.xml index 075f87f36..6c0b86358 100644 --- a/src/.idea/vcs.xml +++ b/src/.idea/vcs.xml @@ -1,7 +1,6 @@ - \ No newline at end of file diff --git a/src/source/ObjcppGenerator.scala b/src/source/ObjcppGenerator.scala index 6fbe1bd59..4a4915975 100644 --- a/src/source/ObjcppGenerator.scala +++ b/src/source/ObjcppGenerator.scala @@ -49,7 +49,11 @@ class ObjcppGenerator(spec: Spec) extends BaseObjcGenerator(spec) { private def arcAssert(w: IndentWriter) = w.wl("static_assert(__has_feature(objc_arc), " + q("Djinni requires ARC to be enabled for this file") + ");") override def generateEnum(origin: String, ident: Ident, doc: Doc, e: Enum) { - // No generation required + var imports = mutable.TreeSet[String]() + imports.add("#import " + q(spec.objcBaseLibIncludePrefix + "DJIMarshal+Private.h")) + imports.add("!#include " + q(spec.objcppIncludeCppPrefix + spec.cppFileIdentStyle(ident) + "." + spec.cppHeaderExt)) + + writeObjcFile(objcppMarshal.privateHeaderName(ident.name), origin, imports, w => {} ) } def headerName(ident: String): String = idObjc.ty(ident) + "." + spec.objcHeaderExt diff --git a/src/source/ObjcppMarshal.scala b/src/source/ObjcppMarshal.scala index c2307a27c..8ad5bc42a 100644 --- a/src/source/ObjcppMarshal.scala +++ b/src/source/ObjcppMarshal.scala @@ -34,9 +34,7 @@ class ObjcppMarshal(spec: Spec) extends Marshal(spec) { case o: MOpaque => List(ImportRef(q(spec.objcBaseLibIncludePrefix + "DJIMarshal+Private.h"))) case d: MDef => d.defType match { - case DEnum => - List(ImportRef(q(spec.objcBaseLibIncludePrefix + "DJIMarshal+Private.h"))) - case DInterface => + case DEnum | DInterface => List(ImportRef(include(m))) case DRecord => val r = d.body.asInstanceOf[Record] @@ -48,10 +46,7 @@ class ObjcppMarshal(spec: Spec) extends Marshal(spec) { } def include(m: Meta) = m match { - case d: MDef => d.defType match { - case DEnum => q(spec.objcBaseLibIncludePrefix + "DJIMarshal+Private.h") - case _ => q(spec.objcppIncludePrefix + privateHeaderName(d.name)) - } + case d: MDef => q(spec.objcppIncludePrefix + privateHeaderName(d.name)) case _ => throw new AssertionError("not applicable") } diff --git a/test-suite/djinni/enum.djinni b/test-suite/djinni/enum.djinni index 03d1e0206..af56c695c 100644 --- a/test-suite/djinni/enum.djinni +++ b/test-suite/djinni/enum.djinni @@ -11,6 +11,18 @@ color = enum { violet; } -opt_color_record = record { - my_color: optional; +enum_usage_record = record { + e: color; + o: optional; + l: list; + s: set; + m: map; +} + +enum_usage_interface = interface +c +j +o { + e(e: color): color; + o(o: optional): optional; + l(l: list): list; + s(s: set): set; + m(m: map): map; } diff --git a/test-suite/generated-src/cpp/assorted_primitives.hpp b/test-suite/generated-src/cpp/assorted_primitives.hpp index caa67f80b..9db7274e5 100644 --- a/test-suite/generated-src/cpp/assorted_primitives.hpp +++ b/test-suite/generated-src/cpp/assorted_primitives.hpp @@ -3,8 +3,8 @@ #pragma once +#include "../../handwritten-src/cpp/optional.hpp" #include -#include #include namespace testsuite { diff --git a/test-suite/generated-src/cpp/client_interface.hpp b/test-suite/generated-src/cpp/client_interface.hpp index fa2c84410..0b35234cd 100644 --- a/test-suite/generated-src/cpp/client_interface.hpp +++ b/test-suite/generated-src/cpp/client_interface.hpp @@ -3,8 +3,8 @@ #pragma once +#include "../../handwritten-src/cpp/optional.hpp" #include -#include #include #include #include diff --git a/test-suite/generated-src/cpp/client_returned_record.hpp b/test-suite/generated-src/cpp/client_returned_record.hpp index ac18574e8..4252095e5 100644 --- a/test-suite/generated-src/cpp/client_returned_record.hpp +++ b/test-suite/generated-src/cpp/client_returned_record.hpp @@ -3,8 +3,8 @@ #pragma once +#include "../../handwritten-src/cpp/optional.hpp" #include -#include #include #include diff --git a/test-suite/generated-src/cpp/constants.hpp b/test-suite/generated-src/cpp/constants.hpp index edd7d5cfa..32b1a0283 100644 --- a/test-suite/generated-src/cpp/constants.hpp +++ b/test-suite/generated-src/cpp/constants.hpp @@ -3,9 +3,9 @@ #pragma once +#include "../../handwritten-src/cpp/optional.hpp" #include "constant_record.hpp" #include -#include #include #include diff --git a/test-suite/generated-src/cpp/constants_interface.hpp b/test-suite/generated-src/cpp/constants_interface.hpp index daa250edc..54a7d6c8c 100644 --- a/test-suite/generated-src/cpp/constants_interface.hpp +++ b/test-suite/generated-src/cpp/constants_interface.hpp @@ -3,8 +3,8 @@ #pragma once +#include "../../handwritten-src/cpp/optional.hpp" #include -#include #include namespace testsuite { diff --git a/test-suite/generated-src/cpp/enum_usage_interface.hpp b/test-suite/generated-src/cpp/enum_usage_interface.hpp new file mode 100644 index 000000000..a55e095f1 --- /dev/null +++ b/test-suite/generated-src/cpp/enum_usage_interface.hpp @@ -0,0 +1,30 @@ +// AUTOGENERATED FILE - DO NOT MODIFY! +// This file generated by Djinni from enum.djinni + +#pragma once + +#include "../../handwritten-src/cpp/optional.hpp" +#include +#include +#include + +namespace testsuite { + +enum class color; + +class EnumUsageInterface { +public: + virtual ~EnumUsageInterface() {} + + virtual color e(color e) = 0; + + virtual std::experimental::optional o(std::experimental::optional o) = 0; + + virtual std::vector l(const std::vector & l) = 0; + + virtual std::unordered_set s(const std::unordered_set & s) = 0; + + virtual std::unordered_map m(const std::unordered_map & m) = 0; +}; + +} // namespace testsuite diff --git a/test-suite/generated-src/cpp/enum_usage_record.hpp b/test-suite/generated-src/cpp/enum_usage_record.hpp new file mode 100644 index 000000000..10d86ebe8 --- /dev/null +++ b/test-suite/generated-src/cpp/enum_usage_record.hpp @@ -0,0 +1,35 @@ +// AUTOGENERATED FILE - DO NOT MODIFY! +// This file generated by Djinni from enum.djinni + +#pragma once + +#include "../../handwritten-src/cpp/optional.hpp" +#include "color.hpp" +#include +#include +#include +#include + +namespace testsuite { + +struct EnumUsageRecord final { + color e; + std::experimental::optional o; + std::vector l; + std::unordered_set s; + std::unordered_map m; + + EnumUsageRecord(color e_, + std::experimental::optional o_, + std::vector l_, + std::unordered_set s_, + std::unordered_map m_) + : e(std::move(e_)) + , o(std::move(o_)) + , l(std::move(l_)) + , s(std::move(s_)) + , m(std::move(m_)) + {} +}; + +} // namespace testsuite diff --git a/test-suite/generated-src/cpp/opt_color_record.hpp b/test-suite/generated-src/cpp/opt_color_record.hpp deleted file mode 100644 index b07746315..000000000 --- a/test-suite/generated-src/cpp/opt_color_record.hpp +++ /dev/null @@ -1,20 +0,0 @@ -// AUTOGENERATED FILE - DO NOT MODIFY! -// This file generated by Djinni from enum.djinni - -#pragma once - -#include "color.hpp" -#include -#include - -namespace testsuite { - -struct OptColorRecord final { - std::experimental::optional my_color; - - OptColorRecord(std::experimental::optional my_color_) - : my_color(std::move(my_color_)) - {} -}; - -} // namespace testsuite diff --git a/test-suite/generated-src/cpp/reverse_client_interface.hpp b/test-suite/generated-src/cpp/reverse_client_interface.hpp index 372af04b4..955b912a5 100644 --- a/test-suite/generated-src/cpp/reverse_client_interface.hpp +++ b/test-suite/generated-src/cpp/reverse_client_interface.hpp @@ -3,7 +3,7 @@ #pragma once -#include +#include "../../handwritten-src/cpp/optional.hpp" #include #include diff --git a/test-suite/generated-src/cpp/test_duration.hpp b/test-suite/generated-src/cpp/test_duration.hpp index 1010e7c7f..028fc5d06 100644 --- a/test-suite/generated-src/cpp/test_duration.hpp +++ b/test-suite/generated-src/cpp/test_duration.hpp @@ -3,9 +3,9 @@ #pragma once +#include "../../handwritten-src/cpp/optional.hpp" #include #include -#include #include namespace testsuite { diff --git a/test-suite/generated-src/cpp/test_helpers.hpp b/test-suite/generated-src/cpp/test_helpers.hpp index 849fb1b5c..df09e2439 100644 --- a/test-suite/generated-src/cpp/test_helpers.hpp +++ b/test-suite/generated-src/cpp/test_helpers.hpp @@ -3,8 +3,8 @@ #pragma once +#include "../../handwritten-src/cpp/optional.hpp" #include -#include #include #include #include diff --git a/test-suite/generated-src/java/com/dropbox/djinni/test/EnumUsageInterface.java b/test-suite/generated-src/java/com/dropbox/djinni/test/EnumUsageInterface.java new file mode 100644 index 000000000..dcb1322db --- /dev/null +++ b/test-suite/generated-src/java/com/dropbox/djinni/test/EnumUsageInterface.java @@ -0,0 +1,92 @@ +// AUTOGENERATED FILE - DO NOT MODIFY! +// This file generated by Djinni from enum.djinni + +package com.dropbox.djinni.test; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.concurrent.atomic.AtomicBoolean; +import javax.annotation.CheckForNull; +import javax.annotation.Nonnull; + +public abstract class EnumUsageInterface { + @Nonnull + public abstract Color e(@Nonnull Color e); + + @CheckForNull + public abstract Color o(@CheckForNull Color o); + + @Nonnull + public abstract ArrayList l(@Nonnull ArrayList l); + + @Nonnull + public abstract HashSet s(@Nonnull HashSet s); + + @Nonnull + public abstract HashMap m(@Nonnull HashMap m); + + private static final class CppProxy extends EnumUsageInterface + { + private final long nativeRef; + private final AtomicBoolean destroyed = new AtomicBoolean(false); + + private CppProxy(long nativeRef) + { + if (nativeRef == 0) throw new RuntimeException("nativeRef is zero"); + this.nativeRef = nativeRef; + } + + private native void nativeDestroy(long nativeRef); + public void destroy() + { + boolean destroyed = this.destroyed.getAndSet(true); + if (!destroyed) nativeDestroy(this.nativeRef); + } + protected void finalize() throws java.lang.Throwable + { + destroy(); + super.finalize(); + } + + @Override + public Color e(Color e) + { + assert !this.destroyed.get() : "trying to use a destroyed object"; + return native_e(this.nativeRef, e); + } + private native Color native_e(long _nativeRef, Color e); + + @Override + public Color o(Color o) + { + assert !this.destroyed.get() : "trying to use a destroyed object"; + return native_o(this.nativeRef, o); + } + private native Color native_o(long _nativeRef, Color o); + + @Override + public ArrayList l(ArrayList l) + { + assert !this.destroyed.get() : "trying to use a destroyed object"; + return native_l(this.nativeRef, l); + } + private native ArrayList native_l(long _nativeRef, ArrayList l); + + @Override + public HashSet s(HashSet s) + { + assert !this.destroyed.get() : "trying to use a destroyed object"; + return native_s(this.nativeRef, s); + } + private native HashSet native_s(long _nativeRef, HashSet s); + + @Override + public HashMap m(HashMap m) + { + assert !this.destroyed.get() : "trying to use a destroyed object"; + return native_m(this.nativeRef, m); + } + private native HashMap native_m(long _nativeRef, HashMap m); + } +} diff --git a/test-suite/generated-src/java/com/dropbox/djinni/test/EnumUsageRecord.java b/test-suite/generated-src/java/com/dropbox/djinni/test/EnumUsageRecord.java new file mode 100644 index 000000000..5d52bbde2 --- /dev/null +++ b/test-suite/generated-src/java/com/dropbox/djinni/test/EnumUsageRecord.java @@ -0,0 +1,74 @@ +// AUTOGENERATED FILE - DO NOT MODIFY! +// This file generated by Djinni from enum.djinni + +package com.dropbox.djinni.test; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import javax.annotation.CheckForNull; +import javax.annotation.Nonnull; + +public class EnumUsageRecord { + + + /*package*/ final Color mE; + + /*package*/ final Color mO; + + /*package*/ final ArrayList mL; + + /*package*/ final HashSet mS; + + /*package*/ final HashMap mM; + + public EnumUsageRecord( + @Nonnull Color e, + @CheckForNull Color o, + @Nonnull ArrayList l, + @Nonnull HashSet s, + @Nonnull HashMap m) { + this.mE = e; + this.mO = o; + this.mL = l; + this.mS = s; + this.mM = m; + } + + @Nonnull + public Color getE() { + return mE; + } + + @CheckForNull + public Color getO() { + return mO; + } + + @Nonnull + public ArrayList getL() { + return mL; + } + + @Nonnull + public HashSet getS() { + return mS; + } + + @Nonnull + public HashMap getM() { + return mM; + } + + @Override + public String toString() { + return "EnumUsageRecord{" + + "mE=" + mE + + "," + "mO=" + mO + + "," + "mL=" + mL + + "," + "mS=" + mS + + "," + "mM=" + mM + + "}"; + } + +} diff --git a/test-suite/generated-src/java/com/dropbox/djinni/test/OptColorRecord.java b/test-suite/generated-src/java/com/dropbox/djinni/test/OptColorRecord.java deleted file mode 100644 index 0f84baeee..000000000 --- a/test-suite/generated-src/java/com/dropbox/djinni/test/OptColorRecord.java +++ /dev/null @@ -1,31 +0,0 @@ -// AUTOGENERATED FILE - DO NOT MODIFY! -// This file generated by Djinni from enum.djinni - -package com.dropbox.djinni.test; - -import javax.annotation.CheckForNull; -import javax.annotation.Nonnull; - -public class OptColorRecord { - - - /*package*/ final Color mMyColor; - - public OptColorRecord( - @CheckForNull Color myColor) { - this.mMyColor = myColor; - } - - @CheckForNull - public Color getMyColor() { - return mMyColor; - } - - @Override - public String toString() { - return "OptColorRecord{" + - "mMyColor=" + mMyColor + - "}"; - } - -} diff --git a/test-suite/generated-src/jni/NativeEnumUsageInterface.cpp b/test-suite/generated-src/jni/NativeEnumUsageInterface.cpp new file mode 100644 index 000000000..4e84735d3 --- /dev/null +++ b/test-suite/generated-src/jni/NativeEnumUsageInterface.cpp @@ -0,0 +1,122 @@ +// AUTOGENERATED FILE - DO NOT MODIFY! +// This file generated by Djinni from enum.djinni + +#include "NativeEnumUsageInterface.hpp" // my header +#include "Marshal.hpp" +#include "NativeColor.hpp" + +namespace djinni_generated { + +NativeEnumUsageInterface::NativeEnumUsageInterface() : ::djinni::JniInterface<::testsuite::EnumUsageInterface, NativeEnumUsageInterface>("com/dropbox/djinni/test/EnumUsageInterface$CppProxy") {} + +NativeEnumUsageInterface::~NativeEnumUsageInterface() = default; + +NativeEnumUsageInterface::JavaProxy::JavaProxy(JniType j) : Handle(::djinni::jniGetThreadEnv(), j) { } + +NativeEnumUsageInterface::JavaProxy::~JavaProxy() = default; + +::testsuite::color NativeEnumUsageInterface::JavaProxy::e(::testsuite::color c_e) { + auto jniEnv = ::djinni::jniGetThreadEnv(); + ::djinni::JniLocalScope jscope(jniEnv, 10); + const auto& data = ::djinni::JniClass<::djinni_generated::NativeEnumUsageInterface>::get(); + auto jret = jniEnv->CallObjectMethod(Handle::get().get(), data.method_e, + ::djinni::get(::djinni_generated::NativeColor::fromCpp(jniEnv, c_e))); + ::djinni::jniExceptionCheck(jniEnv); + return ::djinni_generated::NativeColor::toCpp(jniEnv, jret); +} +std::experimental::optional<::testsuite::color> NativeEnumUsageInterface::JavaProxy::o(std::experimental::optional<::testsuite::color> c_o) { + auto jniEnv = ::djinni::jniGetThreadEnv(); + ::djinni::JniLocalScope jscope(jniEnv, 10); + const auto& data = ::djinni::JniClass<::djinni_generated::NativeEnumUsageInterface>::get(); + auto jret = jniEnv->CallObjectMethod(Handle::get().get(), data.method_o, + ::djinni::get(::djinni::Optional::fromCpp(jniEnv, c_o))); + ::djinni::jniExceptionCheck(jniEnv); + return ::djinni::Optional::toCpp(jniEnv, jret); +} +std::vector<::testsuite::color> NativeEnumUsageInterface::JavaProxy::l(const std::vector<::testsuite::color> & c_l) { + auto jniEnv = ::djinni::jniGetThreadEnv(); + ::djinni::JniLocalScope jscope(jniEnv, 10); + const auto& data = ::djinni::JniClass<::djinni_generated::NativeEnumUsageInterface>::get(); + auto jret = jniEnv->CallObjectMethod(Handle::get().get(), data.method_l, + ::djinni::get(::djinni::List<::djinni_generated::NativeColor>::fromCpp(jniEnv, c_l))); + ::djinni::jniExceptionCheck(jniEnv); + return ::djinni::List<::djinni_generated::NativeColor>::toCpp(jniEnv, jret); +} +std::unordered_set<::testsuite::color> NativeEnumUsageInterface::JavaProxy::s(const std::unordered_set<::testsuite::color> & c_s) { + auto jniEnv = ::djinni::jniGetThreadEnv(); + ::djinni::JniLocalScope jscope(jniEnv, 10); + const auto& data = ::djinni::JniClass<::djinni_generated::NativeEnumUsageInterface>::get(); + auto jret = jniEnv->CallObjectMethod(Handle::get().get(), data.method_s, + ::djinni::get(::djinni::Set<::djinni_generated::NativeColor>::fromCpp(jniEnv, c_s))); + ::djinni::jniExceptionCheck(jniEnv); + return ::djinni::Set<::djinni_generated::NativeColor>::toCpp(jniEnv, jret); +} +std::unordered_map<::testsuite::color, ::testsuite::color> NativeEnumUsageInterface::JavaProxy::m(const std::unordered_map<::testsuite::color, ::testsuite::color> & c_m) { + auto jniEnv = ::djinni::jniGetThreadEnv(); + ::djinni::JniLocalScope jscope(jniEnv, 10); + const auto& data = ::djinni::JniClass<::djinni_generated::NativeEnumUsageInterface>::get(); + auto jret = jniEnv->CallObjectMethod(Handle::get().get(), data.method_m, + ::djinni::get(::djinni::Map<::djinni_generated::NativeColor, ::djinni_generated::NativeColor>::fromCpp(jniEnv, c_m))); + ::djinni::jniExceptionCheck(jniEnv); + return ::djinni::Map<::djinni_generated::NativeColor, ::djinni_generated::NativeColor>::toCpp(jniEnv, jret); +} + +CJNIEXPORT void JNICALL Java_com_dropbox_djinni_test_EnumUsageInterface_00024CppProxy_nativeDestroy(JNIEnv* jniEnv, jobject /*this*/, jlong nativeRef) +{ + try { + DJINNI_FUNCTION_PROLOGUE1(jniEnv, nativeRef); + delete reinterpret_cast<::djinni::CppProxyHandle<::testsuite::EnumUsageInterface>*>(nativeRef); + } JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, ) +} + +CJNIEXPORT jobject JNICALL Java_com_dropbox_djinni_test_EnumUsageInterface_00024CppProxy_native_1e(JNIEnv* jniEnv, jobject /*this*/, jlong nativeRef, jobject j_e) +{ + try { + DJINNI_FUNCTION_PROLOGUE1(jniEnv, nativeRef); + const auto& ref = ::djinni::objectFromHandleAddress<::testsuite::EnumUsageInterface>(nativeRef); + auto r = ref->e(::djinni_generated::NativeColor::toCpp(jniEnv, j_e)); + return ::djinni::release(::djinni_generated::NativeColor::fromCpp(jniEnv, r)); + } JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */) +} + +CJNIEXPORT jobject JNICALL Java_com_dropbox_djinni_test_EnumUsageInterface_00024CppProxy_native_1o(JNIEnv* jniEnv, jobject /*this*/, jlong nativeRef, jobject j_o) +{ + try { + DJINNI_FUNCTION_PROLOGUE1(jniEnv, nativeRef); + const auto& ref = ::djinni::objectFromHandleAddress<::testsuite::EnumUsageInterface>(nativeRef); + auto r = ref->o(::djinni::Optional::toCpp(jniEnv, j_o)); + return ::djinni::release(::djinni::Optional::fromCpp(jniEnv, r)); + } JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */) +} + +CJNIEXPORT jobject JNICALL Java_com_dropbox_djinni_test_EnumUsageInterface_00024CppProxy_native_1l(JNIEnv* jniEnv, jobject /*this*/, jlong nativeRef, jobject j_l) +{ + try { + DJINNI_FUNCTION_PROLOGUE1(jniEnv, nativeRef); + const auto& ref = ::djinni::objectFromHandleAddress<::testsuite::EnumUsageInterface>(nativeRef); + auto r = ref->l(::djinni::List<::djinni_generated::NativeColor>::toCpp(jniEnv, j_l)); + return ::djinni::release(::djinni::List<::djinni_generated::NativeColor>::fromCpp(jniEnv, r)); + } JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */) +} + +CJNIEXPORT jobject JNICALL Java_com_dropbox_djinni_test_EnumUsageInterface_00024CppProxy_native_1s(JNIEnv* jniEnv, jobject /*this*/, jlong nativeRef, jobject j_s) +{ + try { + DJINNI_FUNCTION_PROLOGUE1(jniEnv, nativeRef); + const auto& ref = ::djinni::objectFromHandleAddress<::testsuite::EnumUsageInterface>(nativeRef); + auto r = ref->s(::djinni::Set<::djinni_generated::NativeColor>::toCpp(jniEnv, j_s)); + return ::djinni::release(::djinni::Set<::djinni_generated::NativeColor>::fromCpp(jniEnv, r)); + } JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */) +} + +CJNIEXPORT jobject JNICALL Java_com_dropbox_djinni_test_EnumUsageInterface_00024CppProxy_native_1m(JNIEnv* jniEnv, jobject /*this*/, jlong nativeRef, jobject j_m) +{ + try { + DJINNI_FUNCTION_PROLOGUE1(jniEnv, nativeRef); + const auto& ref = ::djinni::objectFromHandleAddress<::testsuite::EnumUsageInterface>(nativeRef); + auto r = ref->m(::djinni::Map<::djinni_generated::NativeColor, ::djinni_generated::NativeColor>::toCpp(jniEnv, j_m)); + return ::djinni::release(::djinni::Map<::djinni_generated::NativeColor, ::djinni_generated::NativeColor>::fromCpp(jniEnv, r)); + } JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */) +} + +} // namespace djinni_generated diff --git a/test-suite/generated-src/jni/NativeEnumUsageInterface.hpp b/test-suite/generated-src/jni/NativeEnumUsageInterface.hpp new file mode 100644 index 000000000..9710b002b --- /dev/null +++ b/test-suite/generated-src/jni/NativeEnumUsageInterface.hpp @@ -0,0 +1,54 @@ +// AUTOGENERATED FILE - DO NOT MODIFY! +// This file generated by Djinni from enum.djinni + +#pragma once + +#include "djinni_support.hpp" +#include "enum_usage_interface.hpp" + +namespace djinni_generated { + +class NativeEnumUsageInterface final : ::djinni::JniInterface<::testsuite::EnumUsageInterface, NativeEnumUsageInterface> { +public: + using CppType = std::shared_ptr<::testsuite::EnumUsageInterface>; + using CppOptType = std::shared_ptr<::testsuite::EnumUsageInterface>; + using JniType = jobject; + + using Boxed = NativeEnumUsageInterface; + + ~NativeEnumUsageInterface(); + + static CppType toCpp(JNIEnv* jniEnv, JniType j) { return ::djinni::JniClass::get()._fromJava(jniEnv, j); } + static ::djinni::LocalRef fromCppOpt(JNIEnv* jniEnv, const CppOptType& c) { return {jniEnv, ::djinni::JniClass::get()._toJava(jniEnv, c)}; } + static ::djinni::LocalRef fromCpp(JNIEnv* jniEnv, const CppType& c) { return fromCppOpt(jniEnv, c); } + +private: + NativeEnumUsageInterface(); + friend ::djinni::JniClass; + friend ::djinni::JniInterface<::testsuite::EnumUsageInterface, NativeEnumUsageInterface>; + + class JavaProxy final : ::djinni::JavaProxyHandle, public ::testsuite::EnumUsageInterface + { + public: + JavaProxy(JniType j); + ~JavaProxy(); + + ::testsuite::color e(::testsuite::color e) override; + std::experimental::optional<::testsuite::color> o(std::experimental::optional<::testsuite::color> o) override; + std::vector<::testsuite::color> l(const std::vector<::testsuite::color> & l) override; + std::unordered_set<::testsuite::color> s(const std::unordered_set<::testsuite::color> & s) override; + std::unordered_map<::testsuite::color, ::testsuite::color> m(const std::unordered_map<::testsuite::color, ::testsuite::color> & m) override; + + private: + friend ::djinni::JniInterface<::testsuite::EnumUsageInterface, ::djinni_generated::NativeEnumUsageInterface>; + }; + + const ::djinni::GlobalRef clazz { ::djinni::jniFindClass("com/dropbox/djinni/test/EnumUsageInterface") }; + const jmethodID method_e { ::djinni::jniGetMethodID(clazz.get(), "e", "(Lcom/dropbox/djinni/test/Color;)Lcom/dropbox/djinni/test/Color;") }; + const jmethodID method_o { ::djinni::jniGetMethodID(clazz.get(), "o", "(Lcom/dropbox/djinni/test/Color;)Lcom/dropbox/djinni/test/Color;") }; + const jmethodID method_l { ::djinni::jniGetMethodID(clazz.get(), "l", "(Ljava/util/ArrayList;)Ljava/util/ArrayList;") }; + const jmethodID method_s { ::djinni::jniGetMethodID(clazz.get(), "s", "(Ljava/util/HashSet;)Ljava/util/HashSet;") }; + const jmethodID method_m { ::djinni::jniGetMethodID(clazz.get(), "m", "(Ljava/util/HashMap;)Ljava/util/HashMap;") }; +}; + +} // namespace djinni_generated diff --git a/test-suite/generated-src/jni/NativeEnumUsageRecord.cpp b/test-suite/generated-src/jni/NativeEnumUsageRecord.cpp new file mode 100644 index 000000000..0460969ac --- /dev/null +++ b/test-suite/generated-src/jni/NativeEnumUsageRecord.cpp @@ -0,0 +1,37 @@ +// AUTOGENERATED FILE - DO NOT MODIFY! +// This file generated by Djinni from enum.djinni + +#include "NativeEnumUsageRecord.hpp" // my header +#include "Marshal.hpp" +#include "NativeColor.hpp" + +namespace djinni_generated { + +NativeEnumUsageRecord::NativeEnumUsageRecord() = default; + +NativeEnumUsageRecord::~NativeEnumUsageRecord() = default; + +auto NativeEnumUsageRecord::fromCpp(JNIEnv* jniEnv, const CppType& c) -> ::djinni::LocalRef { + const auto& data = ::djinni::JniClass::get(); + auto r = ::djinni::LocalRef{jniEnv->NewObject(data.clazz.get(), data.jconstructor, + ::djinni::get(::djinni_generated::NativeColor::fromCpp(jniEnv, c.e)), + ::djinni::get(::djinni::Optional::fromCpp(jniEnv, c.o)), + ::djinni::get(::djinni::List<::djinni_generated::NativeColor>::fromCpp(jniEnv, c.l)), + ::djinni::get(::djinni::Set<::djinni_generated::NativeColor>::fromCpp(jniEnv, c.s)), + ::djinni::get(::djinni::Map<::djinni_generated::NativeColor, ::djinni_generated::NativeColor>::fromCpp(jniEnv, c.m)))}; + ::djinni::jniExceptionCheck(jniEnv); + return r; +} + +auto NativeEnumUsageRecord::toCpp(JNIEnv* jniEnv, JniType j) -> CppType { + ::djinni::JniLocalScope jscope(jniEnv, 6); + assert(j != nullptr); + const auto& data = ::djinni::JniClass::get(); + return {::djinni_generated::NativeColor::toCpp(jniEnv, jniEnv->GetObjectField(j, data.field_mE)), + ::djinni::Optional::toCpp(jniEnv, jniEnv->GetObjectField(j, data.field_mO)), + ::djinni::List<::djinni_generated::NativeColor>::toCpp(jniEnv, jniEnv->GetObjectField(j, data.field_mL)), + ::djinni::Set<::djinni_generated::NativeColor>::toCpp(jniEnv, jniEnv->GetObjectField(j, data.field_mS)), + ::djinni::Map<::djinni_generated::NativeColor, ::djinni_generated::NativeColor>::toCpp(jniEnv, jniEnv->GetObjectField(j, data.field_mM))}; +} + +} // namespace djinni_generated diff --git a/test-suite/generated-src/jni/NativeEnumUsageRecord.hpp b/test-suite/generated-src/jni/NativeEnumUsageRecord.hpp new file mode 100644 index 000000000..fbc3bbfbd --- /dev/null +++ b/test-suite/generated-src/jni/NativeEnumUsageRecord.hpp @@ -0,0 +1,36 @@ +// AUTOGENERATED FILE - DO NOT MODIFY! +// This file generated by Djinni from enum.djinni + +#pragma once + +#include "djinni_support.hpp" +#include "enum_usage_record.hpp" + +namespace djinni_generated { + +class NativeEnumUsageRecord final { +public: + using CppType = ::testsuite::EnumUsageRecord; + using JniType = jobject; + + using Boxed = NativeEnumUsageRecord; + + ~NativeEnumUsageRecord(); + + static CppType toCpp(JNIEnv* jniEnv, JniType j); + static ::djinni::LocalRef fromCpp(JNIEnv* jniEnv, const CppType& c); + +private: + NativeEnumUsageRecord(); + friend ::djinni::JniClass; + + const ::djinni::GlobalRef clazz { ::djinni::jniFindClass("com/dropbox/djinni/test/EnumUsageRecord") }; + const jmethodID jconstructor { ::djinni::jniGetMethodID(clazz.get(), "", "(Lcom/dropbox/djinni/test/Color;Lcom/dropbox/djinni/test/Color;Ljava/util/ArrayList;Ljava/util/HashSet;Ljava/util/HashMap;)V") }; + const jfieldID field_mE { ::djinni::jniGetFieldID(clazz.get(), "mE", "Lcom/dropbox/djinni/test/Color;") }; + const jfieldID field_mO { ::djinni::jniGetFieldID(clazz.get(), "mO", "Lcom/dropbox/djinni/test/Color;") }; + const jfieldID field_mL { ::djinni::jniGetFieldID(clazz.get(), "mL", "Ljava/util/ArrayList;") }; + const jfieldID field_mS { ::djinni::jniGetFieldID(clazz.get(), "mS", "Ljava/util/HashSet;") }; + const jfieldID field_mM { ::djinni::jniGetFieldID(clazz.get(), "mM", "Ljava/util/HashMap;") }; +}; + +} // namespace djinni_generated diff --git a/test-suite/generated-src/jni/NativeOptColorRecord.cpp b/test-suite/generated-src/jni/NativeOptColorRecord.cpp deleted file mode 100644 index d351766ed..000000000 --- a/test-suite/generated-src/jni/NativeOptColorRecord.cpp +++ /dev/null @@ -1,29 +0,0 @@ -// AUTOGENERATED FILE - DO NOT MODIFY! -// This file generated by Djinni from enum.djinni - -#include "NativeOptColorRecord.hpp" // my header -#include "Marshal.hpp" -#include "NativeColor.hpp" - -namespace djinni_generated { - -NativeOptColorRecord::NativeOptColorRecord() = default; - -NativeOptColorRecord::~NativeOptColorRecord() = default; - -auto NativeOptColorRecord::fromCpp(JNIEnv* jniEnv, const CppType& c) -> ::djinni::LocalRef { - const auto& data = ::djinni::JniClass::get(); - auto r = ::djinni::LocalRef{jniEnv->NewObject(data.clazz.get(), data.jconstructor, - ::djinni::get(::djinni::Optional::fromCpp(jniEnv, c.my_color)))}; - ::djinni::jniExceptionCheck(jniEnv); - return r; -} - -auto NativeOptColorRecord::toCpp(JNIEnv* jniEnv, JniType j) -> CppType { - ::djinni::JniLocalScope jscope(jniEnv, 2); - assert(j != nullptr); - const auto& data = ::djinni::JniClass::get(); - return {::djinni::Optional::toCpp(jniEnv, jniEnv->GetObjectField(j, data.field_mMyColor))}; -} - -} // namespace djinni_generated diff --git a/test-suite/generated-src/jni/NativeOptColorRecord.hpp b/test-suite/generated-src/jni/NativeOptColorRecord.hpp deleted file mode 100644 index c01c9f83e..000000000 --- a/test-suite/generated-src/jni/NativeOptColorRecord.hpp +++ /dev/null @@ -1,32 +0,0 @@ -// AUTOGENERATED FILE - DO NOT MODIFY! -// This file generated by Djinni from enum.djinni - -#pragma once - -#include "djinni_support.hpp" -#include "opt_color_record.hpp" - -namespace djinni_generated { - -class NativeOptColorRecord final { -public: - using CppType = ::testsuite::OptColorRecord; - using JniType = jobject; - - using Boxed = NativeOptColorRecord; - - ~NativeOptColorRecord(); - - static CppType toCpp(JNIEnv* jniEnv, JniType j); - static ::djinni::LocalRef fromCpp(JNIEnv* jniEnv, const CppType& c); - -private: - NativeOptColorRecord(); - friend ::djinni::JniClass; - - const ::djinni::GlobalRef clazz { ::djinni::jniFindClass("com/dropbox/djinni/test/OptColorRecord") }; - const jmethodID jconstructor { ::djinni::jniGetMethodID(clazz.get(), "", "(Lcom/dropbox/djinni/test/Color;)V") }; - const jfieldID field_mMyColor { ::djinni::jniGetFieldID(clazz.get(), "mMyColor", "Lcom/dropbox/djinni/test/Color;") }; -}; - -} // namespace djinni_generated diff --git a/test-suite/generated-src/objc/DBColor+Private.h b/test-suite/generated-src/objc/DBColor+Private.h new file mode 100644 index 000000000..018fa9ff0 --- /dev/null +++ b/test-suite/generated-src/objc/DBColor+Private.h @@ -0,0 +1,6 @@ +// AUTOGENERATED FILE - DO NOT MODIFY! +// This file generated by Djinni from enum.djinni + +#include "color.hpp" +#import "DJIMarshal+Private.h" + diff --git a/test-suite/generated-src/objc/DBEnumUsageInterface+Private.h b/test-suite/generated-src/objc/DBEnumUsageInterface+Private.h new file mode 100644 index 000000000..80debb368 --- /dev/null +++ b/test-suite/generated-src/objc/DBEnumUsageInterface+Private.h @@ -0,0 +1,31 @@ +// AUTOGENERATED FILE - DO NOT MODIFY! +// This file generated by Djinni from enum.djinni + +#include "enum_usage_interface.hpp" +#include + +static_assert(__has_feature(objc_arc), "Djinni requires ARC to be enabled for this file"); + +@protocol DBEnumUsageInterface; + +namespace djinni_generated { + +class EnumUsageInterface +{ +public: + using CppType = std::shared_ptr<::testsuite::EnumUsageInterface>; + using CppOptType = std::shared_ptr<::testsuite::EnumUsageInterface>; + using ObjcType = id; + + using Boxed = EnumUsageInterface; + + static CppType toCpp(ObjcType objc); + static ObjcType fromCppOpt(const CppOptType& cpp); + static ObjcType fromCpp(const CppType& cpp) { return fromCppOpt(cpp); } + +private: + class ObjcProxy; +}; + +} // namespace djinni_generated + diff --git a/test-suite/generated-src/objc/DBEnumUsageInterface+Private.mm b/test-suite/generated-src/objc/DBEnumUsageInterface+Private.mm new file mode 100644 index 000000000..b6f61b1dc --- /dev/null +++ b/test-suite/generated-src/objc/DBEnumUsageInterface+Private.mm @@ -0,0 +1,142 @@ +// AUTOGENERATED FILE - DO NOT MODIFY! +// This file generated by Djinni from enum.djinni + +#import "DBEnumUsageInterface+Private.h" +#import "DBEnumUsageInterface.h" +#import "DBColor+Private.h" +#import "DJICppWrapperCache+Private.h" +#import "DJIError.h" +#import "DJIMarshal+Private.h" +#import "DJIObjcWrapperCache+Private.h" +#include +#include + +static_assert(__has_feature(objc_arc), "Djinni requires ARC to be enabled for this file"); + +@interface DBEnumUsageInterfaceCppProxy : NSObject + +- (id)initWithCpp:(const std::shared_ptr<::testsuite::EnumUsageInterface>&)cppRef; + +@end + +@implementation DBEnumUsageInterfaceCppProxy { + ::djinni::CppProxyCache::Handle> _cppRefHandle; +} + +- (id)initWithCpp:(const std::shared_ptr<::testsuite::EnumUsageInterface>&)cppRef +{ + if (self = [super init]) { + _cppRefHandle.assign(cppRef); + } + return self; +} + +- (DBColor)e:(DBColor)e { + try { + auto r = _cppRefHandle.get()->e(::djinni::Enum<::testsuite::color, DBColor>::toCpp(e)); + return ::djinni::Enum<::testsuite::color, DBColor>::fromCpp(r); + } DJINNI_TRANSLATE_EXCEPTIONS() +} + +- (nullable NSNumber *)o:(nullable NSNumber *)o { + try { + auto r = _cppRefHandle.get()->o(::djinni::Optional>::toCpp(o)); + return ::djinni::Optional>::fromCpp(r); + } DJINNI_TRANSLATE_EXCEPTIONS() +} + +- (nonnull NSArray *)l:(nonnull NSArray *)l { + try { + auto r = _cppRefHandle.get()->l(::djinni::List<::djinni::Enum<::testsuite::color, DBColor>>::toCpp(l)); + return ::djinni::List<::djinni::Enum<::testsuite::color, DBColor>>::fromCpp(r); + } DJINNI_TRANSLATE_EXCEPTIONS() +} + +- (nonnull NSSet *)s:(nonnull NSSet *)s { + try { + auto r = _cppRefHandle.get()->s(::djinni::Set<::djinni::Enum<::testsuite::color, DBColor>>::toCpp(s)); + return ::djinni::Set<::djinni::Enum<::testsuite::color, DBColor>>::fromCpp(r); + } DJINNI_TRANSLATE_EXCEPTIONS() +} + +- (nonnull NSDictionary *)m:(nonnull NSDictionary *)m { + try { + auto r = _cppRefHandle.get()->m(::djinni::Map<::djinni::Enum<::testsuite::color, DBColor>, ::djinni::Enum<::testsuite::color, DBColor>>::toCpp(m)); + return ::djinni::Map<::djinni::Enum<::testsuite::color, DBColor>, ::djinni::Enum<::testsuite::color, DBColor>>::fromCpp(r); + } DJINNI_TRANSLATE_EXCEPTIONS() +} + +namespace djinni_generated { + +class EnumUsageInterface::ObjcProxy final +: public ::testsuite::EnumUsageInterface +, public ::djinni::ObjcProxyCache::Handle +{ +public: + using Handle::Handle; + ::testsuite::color e(::testsuite::color c_e) override + { + @autoreleasepool { + auto r = [Handle::get() e:(::djinni::Enum<::testsuite::color, DBColor>::fromCpp(c_e))]; + return ::djinni::Enum<::testsuite::color, DBColor>::toCpp(r); + } + } + std::experimental::optional<::testsuite::color> o(std::experimental::optional<::testsuite::color> c_o) override + { + @autoreleasepool { + auto r = [Handle::get() o:(::djinni::Optional>::fromCpp(c_o))]; + return ::djinni::Optional>::toCpp(r); + } + } + std::vector<::testsuite::color> l(const std::vector<::testsuite::color> & c_l) override + { + @autoreleasepool { + auto r = [Handle::get() l:(::djinni::List<::djinni::Enum<::testsuite::color, DBColor>>::fromCpp(c_l))]; + return ::djinni::List<::djinni::Enum<::testsuite::color, DBColor>>::toCpp(r); + } + } + std::unordered_set<::testsuite::color> s(const std::unordered_set<::testsuite::color> & c_s) override + { + @autoreleasepool { + auto r = [Handle::get() s:(::djinni::Set<::djinni::Enum<::testsuite::color, DBColor>>::fromCpp(c_s))]; + return ::djinni::Set<::djinni::Enum<::testsuite::color, DBColor>>::toCpp(r); + } + } + std::unordered_map<::testsuite::color, ::testsuite::color> m(const std::unordered_map<::testsuite::color, ::testsuite::color> & c_m) override + { + @autoreleasepool { + auto r = [Handle::get() m:(::djinni::Map<::djinni::Enum<::testsuite::color, DBColor>, ::djinni::Enum<::testsuite::color, DBColor>>::fromCpp(c_m))]; + return ::djinni::Map<::djinni::Enum<::testsuite::color, DBColor>, ::djinni::Enum<::testsuite::color, DBColor>>::toCpp(r); + } + } +}; + +} // namespace djinni_generated + +namespace djinni_generated { + +auto EnumUsageInterface::toCpp(ObjcType objc) -> CppType +{ + if (!objc) { + return nullptr; + } + if ([(id)objc isKindOfClass:[DBEnumUsageInterfaceCppProxy class]]) { + return ((DBEnumUsageInterfaceCppProxy*)objc)->_cppRefHandle.get(); + } + return ::djinni::get_objc_proxy(objc); +} + +auto EnumUsageInterface::fromCppOpt(const CppOptType& cpp) -> ObjcType +{ + if (!cpp) { + return nil; + } + if (auto cppPtr = dynamic_cast(cpp.get())) { + return cppPtr->Handle::get(); + } + return ::djinni::get_cpp_proxy(cpp); +} + +} // namespace djinni_generated + +@end diff --git a/test-suite/generated-src/objc/DBEnumUsageInterface.h b/test-suite/generated-src/objc/DBEnumUsageInterface.h new file mode 100644 index 000000000..b1dea8045 --- /dev/null +++ b/test-suite/generated-src/objc/DBEnumUsageInterface.h @@ -0,0 +1,20 @@ +// AUTOGENERATED FILE - DO NOT MODIFY! +// This file generated by Djinni from enum.djinni + +#import "DBColor.h" +#import + + +@protocol DBEnumUsageInterface + +- (DBColor)e:(DBColor)e; + +- (nullable NSNumber *)o:(nullable NSNumber *)o; + +- (nonnull NSArray *)l:(nonnull NSArray *)l; + +- (nonnull NSSet *)s:(nonnull NSSet *)s; + +- (nonnull NSDictionary *)m:(nonnull NSDictionary *)m; + +@end diff --git a/test-suite/generated-src/objc/DBOptColorRecord+Private.h b/test-suite/generated-src/objc/DBEnumUsageRecord+Private.h similarity index 59% rename from test-suite/generated-src/objc/DBOptColorRecord+Private.h rename to test-suite/generated-src/objc/DBEnumUsageRecord+Private.h index 91b0fdd87..49168caca 100644 --- a/test-suite/generated-src/objc/DBOptColorRecord+Private.h +++ b/test-suite/generated-src/objc/DBEnumUsageRecord+Private.h @@ -1,21 +1,21 @@ // AUTOGENERATED FILE - DO NOT MODIFY! // This file generated by Djinni from enum.djinni -#import "DBOptColorRecord.h" -#include "opt_color_record.hpp" +#import "DBEnumUsageRecord.h" +#include "enum_usage_record.hpp" static_assert(__has_feature(objc_arc), "Djinni requires ARC to be enabled for this file"); -@class DBOptColorRecord; +@class DBEnumUsageRecord; namespace djinni_generated { -struct OptColorRecord +struct EnumUsageRecord { - using CppType = ::testsuite::OptColorRecord; - using ObjcType = DBOptColorRecord*; + using CppType = ::testsuite::EnumUsageRecord; + using ObjcType = DBEnumUsageRecord*; - using Boxed = OptColorRecord; + using Boxed = EnumUsageRecord; static CppType toCpp(ObjcType objc); static ObjcType fromCpp(const CppType& cpp); diff --git a/test-suite/generated-src/objc/DBEnumUsageRecord+Private.mm b/test-suite/generated-src/objc/DBEnumUsageRecord+Private.mm new file mode 100644 index 000000000..2f21a3b69 --- /dev/null +++ b/test-suite/generated-src/objc/DBEnumUsageRecord+Private.mm @@ -0,0 +1,30 @@ +// AUTOGENERATED FILE - DO NOT MODIFY! +// This file generated by Djinni from enum.djinni + +#import "DBEnumUsageRecord+Private.h" +#import "DBColor+Private.h" +#import "DJIMarshal+Private.h" +#include + +namespace djinni_generated { + +auto EnumUsageRecord::toCpp(ObjcType obj) -> CppType +{ + assert(obj); + return {::djinni::Enum<::testsuite::color, DBColor>::toCpp(obj.e), + ::djinni::Optional>::toCpp(obj.o), + ::djinni::List<::djinni::Enum<::testsuite::color, DBColor>>::toCpp(obj.l), + ::djinni::Set<::djinni::Enum<::testsuite::color, DBColor>>::toCpp(obj.s), + ::djinni::Map<::djinni::Enum<::testsuite::color, DBColor>, ::djinni::Enum<::testsuite::color, DBColor>>::toCpp(obj.m)}; +} + +auto EnumUsageRecord::fromCpp(const CppType& cpp) -> ObjcType +{ + return [[DBEnumUsageRecord alloc] initWithE:(::djinni::Enum<::testsuite::color, DBColor>::fromCpp(cpp.e)) + o:(::djinni::Optional>::fromCpp(cpp.o)) + l:(::djinni::List<::djinni::Enum<::testsuite::color, DBColor>>::fromCpp(cpp.l)) + s:(::djinni::Set<::djinni::Enum<::testsuite::color, DBColor>>::fromCpp(cpp.s)) + m:(::djinni::Map<::djinni::Enum<::testsuite::color, DBColor>, ::djinni::Enum<::testsuite::color, DBColor>>::fromCpp(cpp.m))]; +} + +} // namespace djinni_generated diff --git a/test-suite/generated-src/objc/DBEnumUsageRecord.h b/test-suite/generated-src/objc/DBEnumUsageRecord.h new file mode 100644 index 000000000..cbc7f0952 --- /dev/null +++ b/test-suite/generated-src/objc/DBEnumUsageRecord.h @@ -0,0 +1,29 @@ +// AUTOGENERATED FILE - DO NOT MODIFY! +// This file generated by Djinni from enum.djinni + +#import "DBColor.h" +#import + +@interface DBEnumUsageRecord : NSObject +- (nonnull instancetype)initWithE:(DBColor)e + o:(nullable NSNumber *)o + l:(nonnull NSArray *)l + s:(nonnull NSSet *)s + m:(nonnull NSDictionary *)m; ++ (nonnull instancetype)enumUsageRecordWithE:(DBColor)e + o:(nullable NSNumber *)o + l:(nonnull NSArray *)l + s:(nonnull NSSet *)s + m:(nonnull NSDictionary *)m; + +@property (nonatomic, readonly) DBColor e; + +@property (nonatomic, readonly, nullable) NSNumber * o; + +@property (nonatomic, readonly, nonnull) NSArray * l; + +@property (nonatomic, readonly, nonnull) NSSet * s; + +@property (nonatomic, readonly, nonnull) NSDictionary * m; + +@end diff --git a/test-suite/generated-src/objc/DBEnumUsageRecord.mm b/test-suite/generated-src/objc/DBEnumUsageRecord.mm new file mode 100644 index 000000000..94a311561 --- /dev/null +++ b/test-suite/generated-src/objc/DBEnumUsageRecord.mm @@ -0,0 +1,43 @@ +// AUTOGENERATED FILE - DO NOT MODIFY! +// This file generated by Djinni from enum.djinni + +#import "DBEnumUsageRecord.h" + + +@implementation DBEnumUsageRecord + +- (nonnull instancetype)initWithE:(DBColor)e + o:(nullable NSNumber *)o + l:(nonnull NSArray *)l + s:(nonnull NSSet *)s + m:(nonnull NSDictionary *)m +{ + if (self = [super init]) { + _e = e; + _o = o; + _l = [l copy]; + _s = [s copy]; + _m = [m copy]; + } + return self; +} + ++ (nonnull instancetype)enumUsageRecordWithE:(DBColor)e + o:(nullable NSNumber *)o + l:(nonnull NSArray *)l + s:(nonnull NSSet *)s + m:(nonnull NSDictionary *)m +{ + return [[self alloc] initWithE:e + o:o + l:l + s:s + m:m]; +} + +- (NSString *)description +{ + return [NSString stringWithFormat:@"<%@ %p e:%@ o:%@ l:%@ s:%@ m:%@>", self.class, (void *)self, @(self.e), self.o, self.l, self.s, self.m]; +} + +@end diff --git a/test-suite/generated-src/objc/DBExternRecordWithDerivings+Private.mm b/test-suite/generated-src/objc/DBExternRecordWithDerivings+Private.mm index 6d3cd729d..cbb9559c9 100644 --- a/test-suite/generated-src/objc/DBExternRecordWithDerivings+Private.mm +++ b/test-suite/generated-src/objc/DBExternRecordWithDerivings+Private.mm @@ -2,8 +2,8 @@ // This file generated by Djinni from yaml-test.djinni #import "DBExternRecordWithDerivings+Private.h" +#import "DBColor+Private.h" #import "DBRecordWithDerivings+Private.h" -#import "DJIMarshal+Private.h" #include namespace djinni_generated { diff --git a/test-suite/generated-src/objc/DBOptColorRecord+Private.mm b/test-suite/generated-src/objc/DBOptColorRecord+Private.mm deleted file mode 100644 index 1ab0d4a09..000000000 --- a/test-suite/generated-src/objc/DBOptColorRecord+Private.mm +++ /dev/null @@ -1,21 +0,0 @@ -// AUTOGENERATED FILE - DO NOT MODIFY! -// This file generated by Djinni from enum.djinni - -#import "DBOptColorRecord+Private.h" -#import "DJIMarshal+Private.h" -#include - -namespace djinni_generated { - -auto OptColorRecord::toCpp(ObjcType obj) -> CppType -{ - assert(obj); - return {::djinni::Optional>::toCpp(obj.myColor)}; -} - -auto OptColorRecord::fromCpp(const CppType& cpp) -> ObjcType -{ - return [[DBOptColorRecord alloc] initWithMyColor:(::djinni::Optional>::fromCpp(cpp.my_color))]; -} - -} // namespace djinni_generated diff --git a/test-suite/generated-src/objc/DBOptColorRecord.h b/test-suite/generated-src/objc/DBOptColorRecord.h deleted file mode 100644 index a8e16a476..000000000 --- a/test-suite/generated-src/objc/DBOptColorRecord.h +++ /dev/null @@ -1,13 +0,0 @@ -// AUTOGENERATED FILE - DO NOT MODIFY! -// This file generated by Djinni from enum.djinni - -#import "DBColor.h" -#import - -@interface DBOptColorRecord : NSObject -- (nonnull instancetype)initWithMyColor:(nullable NSNumber *)myColor; -+ (nonnull instancetype)optColorRecordWithMyColor:(nullable NSNumber *)myColor; - -@property (nonatomic, readonly, nullable) NSNumber * myColor; - -@end diff --git a/test-suite/generated-src/objc/DBOptColorRecord.mm b/test-suite/generated-src/objc/DBOptColorRecord.mm deleted file mode 100644 index c2643beda..000000000 --- a/test-suite/generated-src/objc/DBOptColorRecord.mm +++ /dev/null @@ -1,27 +0,0 @@ -// AUTOGENERATED FILE - DO NOT MODIFY! -// This file generated by Djinni from enum.djinni - -#import "DBOptColorRecord.h" - - -@implementation DBOptColorRecord - -- (nonnull instancetype)initWithMyColor:(nullable NSNumber *)myColor -{ - if (self = [super init]) { - _myColor = myColor; - } - return self; -} - -+ (nonnull instancetype)optColorRecordWithMyColor:(nullable NSNumber *)myColor -{ - return [[self alloc] initWithMyColor:myColor]; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"<%@ %p myColor:%@>", self.class, (void *)self, self.myColor]; -} - -@end diff --git a/test-suite/generated-src/objc/DBTestHelpers+Private.mm b/test-suite/generated-src/objc/DBTestHelpers+Private.mm index f51065b7f..ff419ad94 100644 --- a/test-suite/generated-src/objc/DBTestHelpers+Private.mm +++ b/test-suite/generated-src/objc/DBTestHelpers+Private.mm @@ -5,6 +5,7 @@ #import "DBTestHelpers.h" #import "DBAssortedPrimitives+Private.h" #import "DBClientInterface+Private.h" +#import "DBColor+Private.h" #import "DBMapListRecord+Private.h" #import "DBNestedCollection+Private.h" #import "DBPrimitiveList+Private.h" diff --git a/test-suite/generated-src/outFileList.txt b/test-suite/generated-src/outFileList.txt index d6b91678e..b14ab5afc 100644 --- a/test-suite/generated-src/outFileList.txt +++ b/test-suite/generated-src/outFileList.txt @@ -27,7 +27,8 @@ djinni-output-temp/cpp/Conflict.hpp djinni-output-temp/cpp/conflict_user.hpp djinni-output-temp/cpp/user_token.hpp djinni-output-temp/cpp/color.hpp -djinni-output-temp/cpp/opt_color_record.hpp +djinni-output-temp/cpp/enum_usage_record.hpp +djinni-output-temp/cpp/enum_usage_interface.hpp djinni-output-temp/cpp/client_returned_record.hpp djinni-output-temp/cpp/client_interface.hpp djinni-output-temp/cpp/reverse_client_interface.hpp @@ -64,7 +65,8 @@ djinni-output-temp/java/Conflict.java djinni-output-temp/java/ConflictUser.java djinni-output-temp/java/UserToken.java djinni-output-temp/java/Color.java -djinni-output-temp/java/OptColorRecord.java +djinni-output-temp/java/EnumUsageRecord.java +djinni-output-temp/java/EnumUsageInterface.java djinni-output-temp/java/ClientReturnedRecord.java djinni-output-temp/java/ClientInterface.java djinni-output-temp/java/ReverseClientInterface.java @@ -121,8 +123,10 @@ djinni-output-temp/jni/NativeConflictUser.cpp djinni-output-temp/jni/NativeUserToken.hpp djinni-output-temp/jni/NativeUserToken.cpp djinni-output-temp/jni/NativeColor.hpp -djinni-output-temp/jni/NativeOptColorRecord.hpp -djinni-output-temp/jni/NativeOptColorRecord.cpp +djinni-output-temp/jni/NativeEnumUsageRecord.hpp +djinni-output-temp/jni/NativeEnumUsageRecord.cpp +djinni-output-temp/jni/NativeEnumUsageInterface.hpp +djinni-output-temp/jni/NativeEnumUsageInterface.cpp djinni-output-temp/jni/NativeClientReturnedRecord.hpp djinni-output-temp/jni/NativeClientReturnedRecord.cpp djinni-output-temp/jni/NativeClientInterface.hpp @@ -177,8 +181,9 @@ djinni-output-temp/objc/DBConflict.h djinni-output-temp/objc/DBConflictUser.h djinni-output-temp/objc/DBUserToken.h djinni-output-temp/objc/DBColor.h -djinni-output-temp/objc/DBOptColorRecord.h -djinni-output-temp/objc/DBOptColorRecord.mm +djinni-output-temp/objc/DBEnumUsageRecord.h +djinni-output-temp/objc/DBEnumUsageRecord.mm +djinni-output-temp/objc/DBEnumUsageInterface.h djinni-output-temp/objc/DBClientReturnedRecord.h djinni-output-temp/objc/DBClientReturnedRecord.mm djinni-output-temp/objc/DBClientInterface.h @@ -242,8 +247,11 @@ djinni-output-temp/objc/DBConflictUser+Private.h djinni-output-temp/objc/DBConflictUser+Private.mm djinni-output-temp/objc/DBUserToken+Private.h djinni-output-temp/objc/DBUserToken+Private.mm -djinni-output-temp/objc/DBOptColorRecord+Private.h -djinni-output-temp/objc/DBOptColorRecord+Private.mm +djinni-output-temp/objc/DBColor+Private.h +djinni-output-temp/objc/DBEnumUsageRecord+Private.h +djinni-output-temp/objc/DBEnumUsageRecord+Private.mm +djinni-output-temp/objc/DBEnumUsageInterface+Private.h +djinni-output-temp/objc/DBEnumUsageInterface+Private.mm djinni-output-temp/objc/DBClientReturnedRecord+Private.h djinni-output-temp/objc/DBClientReturnedRecord+Private.mm djinni-output-temp/objc/DBClientInterface+Private.h diff --git a/test-suite/handwritten-src/cpp/optional.hpp b/test-suite/handwritten-src/cpp/optional.hpp new file mode 100644 index 000000000..bf6ea67cd --- /dev/null +++ b/test-suite/handwritten-src/cpp/optional.hpp @@ -0,0 +1,891 @@ +// Copyright (C) 2011 - 2012 Andrzej Krzemienski. +// +// Use, modification, and distribution is subject to the Boost Software +// License, Version 1.0, as follows: +// +// Boost Software License - Version 1.0 - August 17th, 2003 +// +// Permission is hereby granted, free of charge, to any person or organization +// obtaining a copy of the software and accompanying documentation covered by +// this license (the "Software") to use, reproduce, display, distribute, +// execute, and transmit the Software, and to prepare derivative works of the +// Software, and to permit third-parties to whom the Software is furnished to +// do so, all subject to the following: +// +// The copyright notices in the Software and this entire statement, including +// the above license grant, this restriction and the following disclaimer, +// must be included in all copies of the Software, in whole or in part, and +// all derivative works of the Software, unless such copies or derivative +// works are solely in the form of machine-executable object code generated by +// a source language processor. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. +// +// The idea and interface is based on Boost.Optional library +// authored by Fernando Luis Cacciola Carballal + +# ifndef ___OPTIONAL_HPP___ +# define ___OPTIONAL_HPP___ + +# include +# include +# include +# include +# include +# include +# include + +# define REQUIRES(...) typename enable_if<__VA_ARGS__::value, bool>::type = false + +# if defined __clang__ +# if (__clang_major__ > 2) || (__clang_major__ == 2) && (__clang_minor__ >= 9) +# define OPTIONAL_HAS_THIS_RVALUE_REFS 1 +# else +# define OPTIONAL_HAS_THIS_RVALUE_REFS 0 +# endif +# else +# define OPTIONAL_HAS_THIS_RVALUE_REFS 0 +# endif + + +namespace std{ + +namespace experimental{ + + +// 20.5.4, optional for object types +template class optional; + +// 20.5.5, optional for lvalue reference types +template class optional; + + +// workaround: std utility functions aren't constexpr yet +template inline constexpr T&& constexpr_forward(typename std::remove_reference::type& t) noexcept +{ + return static_cast(t); +} + +template inline constexpr T&& constexpr_forward(typename std::remove_reference::type&& t) noexcept +{ + static_assert(!std::is_lvalue_reference::value, "!!"); + return static_cast(t); +} + +template inline constexpr typename std::remove_reference::type&& constexpr_move(T&& t) noexcept +{ + return static_cast::type&&>(t); +} + +template inline constexpr _Ty * constexpr_addressof(_Ty& _Val) +{ + return ((_Ty *) &(char&)_Val); +} + + +#if defined NDEBUG +# define ASSERTED_EXPRESSION(CHECK, EXPR) (EXPR) +#else +# define ASSERTED_EXPRESSION(CHECK, EXPR) ((CHECK) ? (EXPR) : ([]{assert(#CHECK && false);}(), (EXPR))) +#endif + + +template +struct has_overloaded_addressof +{ + template + static constexpr bool has_overload(...) { return false; } + + template ().operator&()) > + static constexpr bool has_overload(bool) { return true; } + + constexpr static bool value = has_overload(true); +}; + + + +template )> +constexpr T* static_addressof(T& ref) +{ + return &ref; +} + +template )> +T* static_addressof(T& ref) +{ + return std::addressof(ref); +} + + + +template +struct is_not_optional +{ + constexpr static bool value = true; +}; + +template +struct is_not_optional> +{ + constexpr static bool value = false; +}; + + +constexpr struct trivial_init_t{} trivial_init{}; + + +// 20.5.6, In-place construction +constexpr struct in_place_t{} in_place{}; + + +// 20.5.7, Disengaged state indicator +struct nullopt_t +{ + struct init{}; + constexpr nullopt_t(init){}; +}; +constexpr nullopt_t nullopt{nullopt_t::init()}; + + +// 20.5.8, class bad_optional_access +class bad_optional_access : public logic_error { +public: + explicit bad_optional_access(const string& what_arg) : logic_error{what_arg} {} + explicit bad_optional_access(const char* what_arg) : logic_error{what_arg} {} +}; + + +template +union storage_t +{ + unsigned char dummy_; + T value_; + + constexpr storage_t( trivial_init_t ) noexcept : dummy_() {}; + + template + constexpr storage_t( Args&&... args ) : value_(constexpr_forward(args)...) {} + + ~storage_t(){} +}; + + +template +union constexpr_storage_t +{ + unsigned char dummy_; + T value_; + + constexpr constexpr_storage_t( trivial_init_t ) noexcept : dummy_() {}; + + template + constexpr constexpr_storage_t( Args&&... args ) : value_(constexpr_forward(args)...) {} + + ~constexpr_storage_t() = default; +}; + + +constexpr struct only_set_initialized_t{} only_set_initialized{}; + + +template +struct optional_base +{ + bool init_; + storage_t storage_; + + constexpr optional_base() noexcept : init_(false), storage_(trivial_init) {}; + + constexpr explicit optional_base(only_set_initialized_t, bool init) noexcept : init_(init), storage_(trivial_init) {}; + + explicit constexpr optional_base(const T& v) : init_(true), storage_(v) {} + + explicit constexpr optional_base(T&& v) : init_(true), storage_(constexpr_move(v)) {} + + template explicit optional_base(in_place_t, Args&&... args) + : init_(true), storage_(constexpr_forward(args)...) {} + + template >)> + explicit optional_base(in_place_t, std::initializer_list il, Args&&... args) + : init_(true), storage_(il, std::forward(args)...) {} + + ~optional_base() { if (init_) storage_.value_.T::~T(); } +}; + + +template +struct constexpr_optional_base +{ + bool init_; + constexpr_storage_t storage_; + + constexpr constexpr_optional_base() noexcept : init_(false), storage_(trivial_init) {}; + + constexpr explicit constexpr_optional_base(only_set_initialized_t, bool init) noexcept : init_(init), storage_(trivial_init) {}; + + explicit constexpr constexpr_optional_base(const T& v) : init_(true), storage_(v) {} + + explicit constexpr constexpr_optional_base(T&& v) : init_(true), storage_(constexpr_move(v)) {} + + template explicit constexpr constexpr_optional_base(in_place_t, Args&&... args) + : init_(true), storage_(constexpr_forward(args)...) {} + + template >)> + explicit constexpr_optional_base(in_place_t, std::initializer_list il, Args&&... args) + : init_(true), storage_(il, std::forward(args)...) {} + + ~constexpr_optional_base() = default; +}; + +template +using OptionalBase = typename std::conditional< + std::is_trivially_destructible::value, + constexpr_optional_base, + optional_base +>::type; + +template +constexpr bool is_nothrow_swappable_() { + using std::swap; + return noexcept(swap(std::declval(), std::declval())); +} + +template +class optional : private OptionalBase +{ + static_assert( !std::is_same::type, nullopt_t>::value, "bad T" ); + static_assert( !std::is_same::type, in_place_t>::value, "bad T" ); + + + constexpr bool initialized() const noexcept { return OptionalBase::init_; } + T* dataptr() { return std::addressof(OptionalBase::storage_.value_); } + constexpr const T* dataptr() const { return static_addressof(OptionalBase::storage_.value_); } + +# if OPTIONAL_HAS_THIS_RVALUE_REFS == 1 + constexpr const T& contained_val() const& { return OptionalBase::storage_.value_; } + T& contained_val() & { return OptionalBase::storage_.value_; } + T&& contained_val() && { return std::move(OptionalBase::storage_.value_); } +# else + constexpr const T& contained_val() const { return OptionalBase::storage_.value_; } + T& contained_val() { return OptionalBase::storage_.value_; } +# endif + + void clear() noexcept { + if (initialized()) dataptr()->T::~T(); + OptionalBase::init_ = false; + } + + template + void initialize(Args&&... args) noexcept(noexcept(T(std::forward(args)...))) + { + assert(!OptionalBase::init_); + new (dataptr()) T(std::forward(args)...); + OptionalBase::init_ = true; + } + + template + void initialize(std::initializer_list il, Args&&... args) noexcept(noexcept(T(il, std::forward(args)...))) + { + assert(!OptionalBase::init_); + new (dataptr()) T(il, std::forward(args)...); + OptionalBase::init_ = true; + } + +public: + typedef T value_type; + + // 20.5.5.1, constructors + constexpr optional() noexcept : OptionalBase() {}; + constexpr optional(nullopt_t) noexcept : OptionalBase() {}; + + optional(const optional& rhs) + : OptionalBase(only_set_initialized, rhs.initialized()) + { + if (rhs.initialized()) new (dataptr()) T(*rhs); + } + + optional(optional&& rhs) noexcept(std::is_nothrow_move_constructible::value) + : OptionalBase(only_set_initialized, rhs.initialized()) + { + if (rhs.initialized()) new (dataptr()) T(std::move(*rhs)); + } + + constexpr optional(const T& v) : OptionalBase(v) {} + + constexpr optional(T&& v) : OptionalBase(constexpr_move(v)) {} + + template + constexpr explicit optional(in_place_t, Args&&... args) + : OptionalBase(in_place_t{}, constexpr_forward(args)...) {} + + template >)> + explicit optional(in_place_t, std::initializer_list il, Args&&... args) + : OptionalBase(in_place_t{}, il, constexpr_forward(args)...) {} + + // 20.5.4.2 Destructor + ~optional() = default; + + // 20.5.4.3, assignment + optional& operator=(nullopt_t) noexcept + { + clear(); + return *this; + } + + optional& operator=(const optional& rhs) + { + if (initialized() == true && rhs.initialized() == false) clear(); + else if (initialized() == false && rhs.initialized() == true) initialize(*rhs); + else if (initialized() == true && rhs.initialized() == true) contained_val() = *rhs; + return *this; + } + + optional& operator=(optional&& rhs) + noexcept(std::is_nothrow_move_assignable::value && std::is_nothrow_move_constructible::value) + { + if (initialized() == true && rhs.initialized() == false) clear(); + else if (initialized() == false && rhs.initialized() == true) initialize(std::move(*rhs)); + else if (initialized() == true && rhs.initialized() == true) contained_val() = std::move(*rhs); + return *this; + } + + template + auto operator=(U&& v) + -> typename enable_if + < + is_same::type, T>::value, + optional& + >::type + { + if (initialized()) { contained_val() = std::forward(v); } + else { initialize(std::forward(v)); } + return *this; + } + + + template + optional& emplace(Args&&... args) + { + clear(); + initialize(std::forward(args)...); + return *this; + } + + template + optional& emplace(initializer_list il, Args&&... args) + { + clear(); + initialize(il, std::forward(args)...); + return *this; + } + + // 20.5.4.4 Swap + void swap(optional& rhs) noexcept(is_nothrow_move_constructible::value && is_nothrow_swappable_()) + { + if (initialized() == true && rhs.initialized() == false) { rhs.initialize(std::move(**this)); clear(); } + else if (initialized() == false && rhs.initialized() == true) { initialize(std::move(*rhs)); rhs.clear(); } + else if (initialized() == true && rhs.initialized() == true) { using std::swap; swap(**this, *rhs); } + } + + // 20.5.4.5 Observers + constexpr T const* operator ->() const { + return ASSERTED_EXPRESSION(initialized(), dataptr()); + } + + T* operator ->() { + assert (initialized()); + return dataptr(); + } + + constexpr T const& operator *() const { + return ASSERTED_EXPRESSION(initialized(), contained_val()); + } + + T& operator *() { + assert (initialized()); + return contained_val(); + } + + constexpr T const& value() const { + return initialized() ? contained_val() : (throw bad_optional_access("bad optional access"), contained_val()); + } + + T& value() { + return initialized() ? contained_val() : (throw bad_optional_access("bad optional access"), contained_val()); + } + + constexpr explicit operator bool() const noexcept { return initialized(); } + +# if OPTIONAL_HAS_THIS_RVALUE_REFS == 1 + + template + constexpr T value_or(V&& v) const& + { + return *this ? **this : static_cast(constexpr_forward(v)); + } + + template + T value_or(V&& v) && + { + return *this ? std::move(const_cast&>(*this).contained_val()) : static_cast(constexpr_forward(v)); + } + +# else + + template + constexpr T value_or(V&& v) const + { + return *this ? **this : static_cast(constexpr_forward(v)); + } + +# endif + +}; + + +template +class optional +{ + static_assert( !std::is_same::value, "bad T" ); + static_assert( !std::is_same::value, "bad T" ); + T* ref; + +public: + + // 20.5.5.1, construction/destruction + constexpr optional() noexcept : ref(nullptr) {} + + constexpr optional(nullopt_t) noexcept : ref(nullptr) {} + + constexpr optional(T& v) noexcept : ref(static_addressof(v)) {} + + optional(T&&) = delete; + + constexpr optional(const optional& rhs) noexcept : ref(rhs.ref) {} + + explicit constexpr optional(in_place_t, T& v) noexcept : ref(static_addressof(v)) {} + + explicit optional(in_place_t, T&&) = delete; + + ~optional() = default; + + // 20.5.5.2, mutation + optional& operator=(nullopt_t) noexcept { + ref = nullptr; + return *this; + } + + // optional& operator=(const optional& rhs) noexcept { + // ref = rhs.ref; + // return *this; + // } + + // optional& operator=(optional&& rhs) noexcept { + // ref = rhs.ref; + // return *this; + // } + + template + auto operator=(U&& rhs) noexcept + -> typename enable_if + < + is_same::type, optional>::value, + optional& + >::type + { + ref = rhs.ref; + return *this; + } + + template + auto operator=(U&& rhs) noexcept + -> typename enable_if + < + !is_same::type, optional>::value, + optional& + >::type + = delete; + + optional& emplace(T& v) noexcept { + ref = static_addressof(v); + return *this; + } + + optional& emplace(T&&) = delete; + + + void swap(optional& rhs) noexcept + { + std::swap(ref, rhs.ref); + } + + // 20.5.5.3, observers + constexpr T* operator->() const { + return ASSERTED_EXPRESSION(ref, ref); + } + + constexpr T& operator*() const { + return ASSERTED_EXPRESSION(ref, *ref); + } + + constexpr T& value() const { + return ref ? *ref : (throw bad_optional_access("bad optional access"), *ref); + } + + explicit constexpr operator bool() const noexcept { + return ref != nullptr; + } + + template + constexpr typename decay::type value_or(V&& v) const + { + return *this ? **this : static_cast::type>(constexpr_forward(v)); + } +}; + + +template +class optional +{ + static_assert( sizeof(T) == 0, "optional rvalue referencs disallowed" ); +}; + + +// 20.5.8, Relational operators +template constexpr bool operator==(const optional& x, const optional& y) +{ + return bool(x) != bool(y) ? false : bool(x) == false ? true : *x == *y; +} + +template constexpr bool operator!=(const optional& x, const optional& y) +{ + return !(x == y); +} + +template constexpr bool operator<(const optional& x, const optional& y) +{ + return (!y) ? false : (!x) ? true : *x < *y; +} + +template constexpr bool operator>(const optional& x, const optional& y) +{ + return (y < x); +} + +template constexpr bool operator<=(const optional& x, const optional& y) +{ + return !(y < x); +} + +template constexpr bool operator>=(const optional& x, const optional& y) +{ + return !(x < y); +} + + +// 20.5.9 Comparison with nullopt +template constexpr bool operator==(const optional& x, nullopt_t) noexcept +{ + return (!x); +} + +template constexpr bool operator==(nullopt_t, const optional& x) noexcept +{ + return (!x); +} + +template constexpr bool operator!=(const optional& x, nullopt_t) noexcept +{ + return bool(x); +} + +template constexpr bool operator!=(nullopt_t, const optional& x) noexcept +{ + return bool(x); +} + +template constexpr bool operator<(const optional&, nullopt_t) noexcept +{ + return false; +} + +template constexpr bool operator<(nullopt_t, const optional& x) noexcept +{ + return bool(x); +} + +template constexpr bool operator<=(const optional& x, nullopt_t) noexcept +{ + return (!x); +} + +template constexpr bool operator<=(nullopt_t, const optional&) noexcept +{ + return true; +} + +template constexpr bool operator>(const optional& x, nullopt_t) noexcept +{ + return bool(x); +} + +template constexpr bool operator>(nullopt_t, const optional&) noexcept +{ + return false; +} + +template constexpr bool operator>=(const optional&, nullopt_t) noexcept +{ + return true; +} + +template constexpr bool operator>=(nullopt_t, const optional& x) noexcept +{ + return (!x); +} + + + +// 20.5.10, Comparison with T +template constexpr bool operator==(const optional& x, const T& v) +{ + return bool(x) ? *x == v : false; +} + +template constexpr bool operator==(const T& v, const optional& x) +{ + return bool(x) ? v == *x : false; +} + +template constexpr bool operator!=(const optional& x, const T& v) +{ + return bool(x) ? *x != v : true; +} + +template constexpr bool operator!=(const T& v, const optional& x) +{ + return bool(x) ? v != *x : true; +} + +template constexpr bool operator<(const optional& x, const T& v) +{ + return bool(x) ? *x < v : true; +} + +template constexpr bool operator>(const T& v, const optional& x) +{ + return bool(x) ? v > *x : true; +} + +template constexpr bool operator>(const optional& x, const T& v) +{ + return bool(x) ? *x > v : false; +} + +template constexpr bool operator<(const T& v, const optional& x) +{ + return bool(x) ? v < *x : false; +} + +template constexpr bool operator>=(const optional& x, const T& v) +{ + return bool(x) ? *x >= v : false; +} + +template constexpr bool operator<=(const T& v, const optional& x) +{ + return bool(x) ? v <= *x : false; +} + +template constexpr bool operator<=(const optional& x, const T& v) +{ + return bool(x) ? *x <= v : true; +} + +template constexpr bool operator>=(const T& v, const optional& x) +{ + return bool(x) ? v >= *x : true; +} + + +// Comparison of optionsl with T +template constexpr bool operator==(const optional& x, const T& v) +{ + return bool(x) ? *x == v : false; +} + +template constexpr bool operator==(const T& v, const optional& x) +{ + return bool(x) ? v == *x : false; +} + +template constexpr bool operator!=(const optional& x, const T& v) +{ + return bool(x) ? *x != v : true; +} + +template constexpr bool operator!=(const T& v, const optional& x) +{ + return bool(x) ? v != *x : true; +} + +template constexpr bool operator<(const optional& x, const T& v) +{ + return bool(x) ? *x < v : true; +} + +template constexpr bool operator>(const T& v, const optional& x) +{ + return bool(x) ? v > *x : true; +} + +template constexpr bool operator>(const optional& x, const T& v) +{ + return bool(x) ? *x > v : false; +} + +template constexpr bool operator<(const T& v, const optional& x) +{ + return bool(x) ? v < *x : false; +} + +template constexpr bool operator>=(const optional& x, const T& v) +{ + return bool(x) ? *x >= v : false; +} + +template constexpr bool operator<=(const T& v, const optional& x) +{ + return bool(x) ? v <= *x : false; +} + +template constexpr bool operator<=(const optional& x, const T& v) +{ + return bool(x) ? *x <= v : true; +} + +template constexpr bool operator>=(const T& v, const optional& x) +{ + return bool(x) ? v >= *x : true; +} + +// Comparison of optionsl with T +template constexpr bool operator==(const optional& x, const T& v) +{ + return bool(x) ? *x == v : false; +} + +template constexpr bool operator==(const T& v, const optional& x) +{ + return bool(x) ? v == *x : false; +} + +template constexpr bool operator!=(const optional& x, const T& v) +{ + return bool(x) ? *x != v : true; +} + +template constexpr bool operator!=(const T& v, const optional& x) +{ + return bool(x) ? v != *x : true; +} + +template constexpr bool operator<(const optional& x, const T& v) +{ + return bool(x) ? *x < v : true; +} + +template constexpr bool operator>(const T& v, const optional& x) +{ + return bool(x) ? v > *x : true; +} + +template constexpr bool operator>(const optional& x, const T& v) +{ + return bool(x) ? *x > v : false; +} + +template constexpr bool operator<(const T& v, const optional& x) +{ + return bool(x) ? v < *x : false; +} + +template constexpr bool operator>=(const optional& x, const T& v) +{ + return bool(x) ? *x >= v : false; +} + +template constexpr bool operator<=(const T& v, const optional& x) +{ + return bool(x) ? v <= *x : false; +} + +template constexpr bool operator<=(const optional& x, const T& v) +{ + return bool(x) ? *x <= v : true; +} + +template constexpr bool operator>=(const T& v, const optional& x) +{ + return bool(x) ? v >= *x : true; +} + + +// 20.5.12 Specialized algorithms +template +void swap(optional& x, optional& y) noexcept(noexcept(x.swap(y))) +{ + x.swap(y); +} + + +template +constexpr optional::type> make_optional(T&& v) +{ + return optional::type>(constexpr_forward(v)); +} + +template +constexpr optional make_optional(reference_wrapper v) +{ + return optional(v.get()); +} + + +} // namespace experimental +} // namespace std + +namespace std +{ + template + struct hash> + { + typedef typename hash::result_type result_type; + typedef std::experimental::optional argument_type; + + constexpr result_type operator()(argument_type const& arg) const { + return arg ? std::hash{}(*arg) : result_type{}; + } + }; + + template + struct hash> + { + typedef typename hash::result_type result_type; + typedef std::experimental::optional argument_type; + + constexpr result_type operator()(argument_type const& arg) const { + return arg ? std::hash{}(*arg) : result_type{}; + } + }; +} + + + +# endif //___OPTIONAL_HPP___ diff --git a/test-suite/java/CMakeLists.txt b/test-suite/java/CMakeLists.txt index 1bb317296..4466cd21e 100644 --- a/test-suite/java/CMakeLists.txt +++ b/test-suite/java/CMakeLists.txt @@ -37,7 +37,7 @@ file( ../generated-src/cpp/*.cpp ../handwritten-src/cpp/*.cpp) -set(test_suite_common_flags "-g -Wall -Werror -std=c++1y") +set(test_suite_common_flags "-g -Wall -Werror -std=c++11") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${test_suite_common_flags}") if(UNIX OR APPLE) diff --git a/test-suite/objc/DjinniObjcTest.xcodeproj/project.pbxproj b/test-suite/objc/DjinniObjcTest.xcodeproj/project.pbxproj index 4fb119dcd..1d31c7064 100644 --- a/test-suite/objc/DjinniObjcTest.xcodeproj/project.pbxproj +++ b/test-suite/objc/DjinniObjcTest.xcodeproj/project.pbxproj @@ -32,13 +32,7 @@ 65868B5F1989FE4200D60EEE /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 65868B5E1989FE4200D60EEE /* UIKit.framework */; }; 65868B621989FE4200D60EEE /* libDjinniObjcTest.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 65868B4A1989FE4200D60EEE /* libDjinniObjcTest.a */; }; 6D66A8A91A3B09F000B312E8 /* DBConstantTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6D66A8A81A3B09F000B312E8 /* DBConstantTests.mm */; }; - 728E111B1D37DE0B005A554D /* DBWcharTestHelpers+Private.mm in Sources */ = {isa = PBXBuildFile; fileRef = 728E11161D37DE0B005A554D /* DBWcharTestHelpers+Private.mm */; }; - 728E111C1D37DE0B005A554D /* DBWcharTestRec.mm in Sources */ = {isa = PBXBuildFile; fileRef = 728E11181D37DE0B005A554D /* DBWcharTestRec.mm */; }; - 728E111D1D37DE0B005A554D /* DBWcharTestRec+Private.mm in Sources */ = {isa = PBXBuildFile; fileRef = 728E111A1D37DE0B005A554D /* DBWcharTestRec+Private.mm */; }; - 728E111F1D37DE1C005A554D /* wchar_test_helpers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 728E111E1D37DE1C005A554D /* wchar_test_helpers.cpp */; }; A20094101B06982F00EF8D9B /* DBTokenTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = A200940E1B0697D300EF8D9B /* DBTokenTests.mm */; }; - A209B5791BBA2A0A0070C310 /* DBOptColorRecord.mm in Sources */ = {isa = PBXBuildFile; fileRef = A209B5761BBA2A0A0070C310 /* DBOptColorRecord.mm */; }; - A209B57A1BBA2A0A0070C310 /* DBOptColorRecord+Private.mm in Sources */ = {isa = PBXBuildFile; fileRef = A209B5781BBA2A0A0070C310 /* DBOptColorRecord+Private.mm */; }; A238CA8E1AF84B7100CDDCE5 /* DBClientReturnedRecord+Private.mm in Sources */ = {isa = PBXBuildFile; fileRef = A238CA761AF84B7100CDDCE5 /* DBClientReturnedRecord+Private.mm */; }; A238CA901AF84B7100CDDCE5 /* DBConstants+Private.mm in Sources */ = {isa = PBXBuildFile; fileRef = A238CA781AF84B7100CDDCE5 /* DBConstants+Private.mm */; }; A238CA921AF84B7100CDDCE5 /* DBDateRecord+Private.mm in Sources */ = {isa = PBXBuildFile; fileRef = A238CA7A1AF84B7100CDDCE5 /* DBDateRecord+Private.mm */; }; @@ -67,6 +61,12 @@ A278D45319BA3601006FD937 /* test_helpers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A278D45219BA3601006FD937 /* test_helpers.cpp */; }; A2AE38491BB3074800B7A0C9 /* DJIProxyCaches.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6536CD6C19A6C82200DD7715 /* DJIProxyCaches.mm */; }; A2CB54B419BA6E6000A9E600 /* DJIError.mm in Sources */ = {isa = PBXBuildFile; fileRef = A2CB54B319BA6E6000A9E600 /* DJIError.mm */; }; + B5153F931D54283700012654 /* DBWcharTestRec+Private.mm in Sources */ = {isa = PBXBuildFile; fileRef = B5153F891D54283700012654 /* DBWcharTestRec+Private.mm */; }; + B5153F941D54283700012654 /* DBWcharTestRec.mm in Sources */ = {isa = PBXBuildFile; fileRef = B5153F8B1D54283700012654 /* DBWcharTestRec.mm */; }; + B5153F961D54283700012654 /* DBUsesSingleLanguageListeners+Private.mm in Sources */ = {isa = PBXBuildFile; fileRef = B5153F901D54283700012654 /* DBUsesSingleLanguageListeners+Private.mm */; }; + B5153F9A1D54284100012654 /* DBJavaOnlyListener+Private.mm in Sources */ = {isa = PBXBuildFile; fileRef = B5153F971D54284100012654 /* DBJavaOnlyListener+Private.mm */; }; + B51911181D542A7000772DFE /* DBWcharTestHelpers+Private.mm in Sources */ = {isa = PBXBuildFile; fileRef = B51911151D542A7000772DFE /* DBWcharTestHelpers+Private.mm */; }; + B519111B1D542B0700772DFE /* wchar_test_helpers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B519111A1D542B0700772DFE /* wchar_test_helpers.cpp */; }; B52DA5681B103F72005CE75F /* DBAssortedPrimitives.mm in Sources */ = {isa = PBXBuildFile; fileRef = B52DA5651B103F6D005CE75F /* DBAssortedPrimitives.mm */; }; B52DA5691B103F72005CE75F /* DBAssortedPrimitives.mm in Sources */ = {isa = PBXBuildFile; fileRef = B52DA5651B103F6D005CE75F /* DBAssortedPrimitives.mm */; }; B52DA56A1B103F75005CE75F /* DBAssortedPrimitives+Private.mm in Sources */ = {isa = PBXBuildFile; fileRef = B52DA5671B103F6D005CE75F /* DBAssortedPrimitives+Private.mm */; }; @@ -77,9 +77,16 @@ B5D8FC371C23E2F40045ADCF /* DBConstantRecord+Private.mm in Sources */ = {isa = PBXBuildFile; fileRef = B5D8FC351C23E2F40045ADCF /* DBConstantRecord+Private.mm */; }; B5E9C93B1C1F9D9D0073C123 /* reverse_client_interface_impl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B5E9C9391C1F9D9D0073C123 /* reverse_client_interface_impl.cpp */; }; B5E9C9401C1F9E9E0073C123 /* DBReverseClientInterface+Private.mm in Sources */ = {isa = PBXBuildFile; fileRef = B5E9C93F1C1F9E9E0073C123 /* DBReverseClientInterface+Private.mm */; }; - B5F06AB11D499379005BE736 /* DBUsesSingleLanguageListeners+Private.mm in Sources */ = {isa = PBXBuildFile; fileRef = B5F06AA81D499379005BE736 /* DBUsesSingleLanguageListeners+Private.mm */; }; - B5F06AB21D499379005BE736 /* DBObjcOnlyListener+Private.mm in Sources */ = {isa = PBXBuildFile; fileRef = B5F06AAB1D499379005BE736 /* DBObjcOnlyListener+Private.mm */; }; - B5F06AB31D499379005BE736 /* DBJavaOnlyListener+Private.mm in Sources */ = {isa = PBXBuildFile; fileRef = B5F06AAE1D499379005BE736 /* DBJavaOnlyListener+Private.mm */; }; + B5F06A6D1D497396005BE736 /* extended_record_base.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B5F06A681D497396005BE736 /* extended_record_base.cpp */; }; + B5F06A851D4973BD005BE736 /* DBConflict+Private.mm in Sources */ = {isa = PBXBuildFile; fileRef = B5F06A701D4973BD005BE736 /* DBConflict+Private.mm */; }; + B5F06A861D4973BD005BE736 /* DBConflictUser+Private.mm in Sources */ = {isa = PBXBuildFile; fileRef = B5F06A731D4973BD005BE736 /* DBConflictUser+Private.mm */; }; + B5F06A891D4973BD005BE736 /* DBExtendedRecord.mm in Sources */ = {isa = PBXBuildFile; fileRef = B5F06A791D4973BD005BE736 /* DBExtendedRecord.mm */; }; + B5F06A8A1D4973BD005BE736 /* DBExtendedRecord+Private.mm in Sources */ = {isa = PBXBuildFile; fileRef = B5F06A7B1D4973BD005BE736 /* DBExtendedRecord+Private.mm */; }; + B5F06A8C1D4973BD005BE736 /* DBObjcOnlyListener+Private.mm in Sources */ = {isa = PBXBuildFile; fileRef = B5F06A811D4973BD005BE736 /* DBObjcOnlyListener+Private.mm */; }; + B5F06A9A1D497A66005BE736 /* extended_record.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B5F06A971D497A66005BE736 /* extended_record.cpp */; }; + B5F06AA51D4987EF005BE736 /* DBEnumUsageInterface+Private.mm in Sources */ = {isa = PBXBuildFile; fileRef = B5F06AA01D4987EF005BE736 /* DBEnumUsageInterface+Private.mm */; }; + B5F06AA61D4987EF005BE736 /* DBEnumUsageRecord.mm in Sources */ = {isa = PBXBuildFile; fileRef = B5F06AA21D4987EF005BE736 /* DBEnumUsageRecord.mm */; }; + B5F06AA71D4987EF005BE736 /* DBEnumUsageRecord+Private.mm in Sources */ = {isa = PBXBuildFile; fileRef = B5F06AA41D4987EF005BE736 /* DBEnumUsageRecord+Private.mm */; }; CFAED8751B54291900E3B8A3 /* DBEmptyRecord.mm in Sources */ = {isa = PBXBuildFile; fileRef = CFAED8721B54291900E3B8A3 /* DBEmptyRecord.mm */; }; CFAED8761B54291900E3B8A3 /* DBEmptyRecord+Private.mm in Sources */ = {isa = PBXBuildFile; fileRef = CFAED8741B54291900E3B8A3 /* DBEmptyRecord+Private.mm */; }; CFC5D9D01B15105100BF2DF8 /* extern_record_with_derivings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CFC5D9CE1B15105100BF2DF8 /* extern_record_with_derivings.cpp */; }; @@ -190,23 +197,8 @@ 65868B5B1989FE4200D60EEE /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; 65868B5E1989FE4200D60EEE /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; 6D66A8A81A3B09F000B312E8 /* DBConstantTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DBConstantTests.mm; sourceTree = ""; }; - 728E11121D37DDFB005A554D /* wchar_test_helpers.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = wchar_test_helpers.hpp; sourceTree = ""; }; - 728E11131D37DDFB005A554D /* wchar_test_rec.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = wchar_test_rec.hpp; sourceTree = ""; }; - 728E11141D37DE0B005A554D /* DBWcharTestHelpers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DBWcharTestHelpers.h; sourceTree = ""; }; - 728E11151D37DE0B005A554D /* DBWcharTestHelpers+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "DBWcharTestHelpers+Private.h"; sourceTree = ""; }; - 728E11161D37DE0B005A554D /* DBWcharTestHelpers+Private.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "DBWcharTestHelpers+Private.mm"; sourceTree = ""; }; - 728E11171D37DE0B005A554D /* DBWcharTestRec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DBWcharTestRec.h; sourceTree = ""; }; - 728E11181D37DE0B005A554D /* DBWcharTestRec.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DBWcharTestRec.mm; sourceTree = ""; }; - 728E11191D37DE0B005A554D /* DBWcharTestRec+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "DBWcharTestRec+Private.h"; sourceTree = ""; }; - 728E111A1D37DE0B005A554D /* DBWcharTestRec+Private.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "DBWcharTestRec+Private.mm"; sourceTree = ""; }; - 728E111E1D37DE1C005A554D /* wchar_test_helpers.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wchar_test_helpers.cpp; sourceTree = ""; }; 728E11201D37DE27005A554D /* DBWcharTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DBWcharTests.m; sourceTree = ""; }; A200940E1B0697D300EF8D9B /* DBTokenTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DBTokenTests.mm; sourceTree = ""; }; - A209B5751BBA2A0A0070C310 /* DBOptColorRecord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DBOptColorRecord.h; sourceTree = ""; }; - A209B5761BBA2A0A0070C310 /* DBOptColorRecord.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DBOptColorRecord.mm; sourceTree = ""; }; - A209B5771BBA2A0A0070C310 /* DBOptColorRecord+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "DBOptColorRecord+Private.h"; sourceTree = ""; }; - A209B5781BBA2A0A0070C310 /* DBOptColorRecord+Private.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "DBOptColorRecord+Private.mm"; sourceTree = ""; }; - A209B57B1BBA2A180070C310 /* opt_color_record.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = opt_color_record.hpp; sourceTree = ""; }; A238CA761AF84B7100CDDCE5 /* DBClientReturnedRecord+Private.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "DBClientReturnedRecord+Private.mm"; sourceTree = ""; }; A238CA781AF84B7100CDDCE5 /* DBConstants+Private.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "DBConstants+Private.mm"; sourceTree = ""; }; A238CA7A1AF84B7100CDDCE5 /* DBDateRecord+Private.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "DBDateRecord+Private.mm"; sourceTree = ""; }; @@ -282,6 +274,22 @@ A278D45219BA3601006FD937 /* test_helpers.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = test_helpers.cpp; sourceTree = ""; }; A2CB54B319BA6E6000A9E600 /* DJIError.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DJIError.mm; sourceTree = ""; }; A2CCB9411AF80DFC00E6230A /* DBClientInterface+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "DBClientInterface+Private.h"; sourceTree = ""; }; + B5153F871D54282C00012654 /* wchar_test_rec.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = wchar_test_rec.hpp; sourceTree = ""; }; + B5153F891D54283700012654 /* DBWcharTestRec+Private.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "DBWcharTestRec+Private.mm"; sourceTree = ""; }; + B5153F8A1D54283700012654 /* DBWcharTestRec+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "DBWcharTestRec+Private.h"; sourceTree = ""; }; + B5153F8B1D54283700012654 /* DBWcharTestRec.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DBWcharTestRec.mm; sourceTree = ""; }; + B5153F8C1D54283700012654 /* DBWcharTestRec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DBWcharTestRec.h; sourceTree = ""; }; + B5153F901D54283700012654 /* DBUsesSingleLanguageListeners+Private.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "DBUsesSingleLanguageListeners+Private.mm"; sourceTree = ""; }; + B5153F911D54283700012654 /* DBUsesSingleLanguageListeners+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "DBUsesSingleLanguageListeners+Private.h"; sourceTree = ""; }; + B5153F921D54283700012654 /* DBUsesSingleLanguageListeners.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DBUsesSingleLanguageListeners.h; sourceTree = ""; }; + B5153F971D54284100012654 /* DBJavaOnlyListener+Private.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "DBJavaOnlyListener+Private.mm"; sourceTree = ""; }; + B5153F981D54284100012654 /* DBJavaOnlyListener+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "DBJavaOnlyListener+Private.h"; sourceTree = ""; }; + B5153F991D54284100012654 /* DBJavaOnlyListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DBJavaOnlyListener.h; sourceTree = ""; }; + B51911151D542A7000772DFE /* DBWcharTestHelpers+Private.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "DBWcharTestHelpers+Private.mm"; sourceTree = ""; }; + B51911161D542A7000772DFE /* DBWcharTestHelpers+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "DBWcharTestHelpers+Private.h"; sourceTree = ""; }; + B51911171D542A7000772DFE /* DBWcharTestHelpers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DBWcharTestHelpers.h; sourceTree = ""; }; + B51911191D542AEC00772DFE /* wchar_test_helpers.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = wchar_test_helpers.hpp; sourceTree = ""; }; + B519111A1D542B0700772DFE /* wchar_test_helpers.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wchar_test_helpers.cpp; sourceTree = ""; }; B52DA5641B103F6D005CE75F /* DBAssortedPrimitives.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DBAssortedPrimitives.h; sourceTree = ""; }; B52DA5651B103F6D005CE75F /* DBAssortedPrimitives.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = DBAssortedPrimitives.mm; sourceTree = ""; }; B52DA5661B103F6D005CE75F /* DBAssortedPrimitives+Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "DBAssortedPrimitives+Private.h"; sourceTree = ""; }; @@ -300,18 +308,39 @@ B5E9C93D1C1F9E9E0073C123 /* DBReverseClientInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DBReverseClientInterface.h; sourceTree = ""; }; B5E9C93E1C1F9E9E0073C123 /* DBReverseClientInterface+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "DBReverseClientInterface+Private.h"; sourceTree = ""; }; B5E9C93F1C1F9E9E0073C123 /* DBReverseClientInterface+Private.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "DBReverseClientInterface+Private.mm"; sourceTree = ""; }; - B5F06AA81D499379005BE736 /* DBUsesSingleLanguageListeners+Private.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "DBUsesSingleLanguageListeners+Private.mm"; sourceTree = ""; }; - B5F06AA91D499379005BE736 /* DBUsesSingleLanguageListeners+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "DBUsesSingleLanguageListeners+Private.h"; sourceTree = ""; }; - B5F06AAA1D499379005BE736 /* DBUsesSingleLanguageListeners.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DBUsesSingleLanguageListeners.h; sourceTree = ""; }; - B5F06AAB1D499379005BE736 /* DBObjcOnlyListener+Private.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "DBObjcOnlyListener+Private.mm"; sourceTree = ""; }; - B5F06AAC1D499379005BE736 /* DBObjcOnlyListener+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "DBObjcOnlyListener+Private.h"; sourceTree = ""; }; - B5F06AAD1D499379005BE736 /* DBObjcOnlyListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DBObjcOnlyListener.h; sourceTree = ""; }; - B5F06AAE1D499379005BE736 /* DBJavaOnlyListener+Private.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "DBJavaOnlyListener+Private.mm"; sourceTree = ""; }; - B5F06AAF1D499379005BE736 /* DBJavaOnlyListener+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "DBJavaOnlyListener+Private.h"; sourceTree = ""; }; - B5F06AB01D499379005BE736 /* DBJavaOnlyListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DBJavaOnlyListener.h; sourceTree = ""; }; - B5F06AB41D49950C005BE736 /* uses_single_language_listeners.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = uses_single_language_listeners.hpp; sourceTree = ""; }; - B5F06AB51D49950C005BE736 /* objc_only_listener.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = objc_only_listener.hpp; sourceTree = ""; }; - B5F06AB61D49950C005BE736 /* java_only_listener.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = java_only_listener.hpp; sourceTree = ""; }; + B5F06A651D497396005BE736 /* conflict_user.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = conflict_user.hpp; sourceTree = ""; }; + B5F06A661D497396005BE736 /* Conflict.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = Conflict.hpp; sourceTree = ""; }; + B5F06A681D497396005BE736 /* extended_record_base.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = extended_record_base.cpp; sourceTree = ""; }; + B5F06A691D497396005BE736 /* extended_record_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = extended_record_base.hpp; sourceTree = ""; }; + B5F06A6A1D497396005BE736 /* java_only_listener.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = java_only_listener.hpp; sourceTree = ""; }; + B5F06A6B1D497396005BE736 /* objc_only_listener.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = objc_only_listener.hpp; sourceTree = ""; }; + B5F06A6C1D497396005BE736 /* uses_single_language_listeners.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = uses_single_language_listeners.hpp; sourceTree = ""; }; + B5F06A6E1D4973BD005BE736 /* DBConflict.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DBConflict.h; sourceTree = ""; }; + B5F06A6F1D4973BD005BE736 /* DBConflict+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "DBConflict+Private.h"; sourceTree = ""; }; + B5F06A701D4973BD005BE736 /* DBConflict+Private.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "DBConflict+Private.mm"; sourceTree = ""; }; + B5F06A711D4973BD005BE736 /* DBConflictUser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DBConflictUser.h; sourceTree = ""; }; + B5F06A721D4973BD005BE736 /* DBConflictUser+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "DBConflictUser+Private.h"; sourceTree = ""; }; + B5F06A731D4973BD005BE736 /* DBConflictUser+Private.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "DBConflictUser+Private.mm"; sourceTree = ""; }; + B5F06A781D4973BD005BE736 /* DBExtendedRecord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DBExtendedRecord.h; sourceTree = ""; }; + B5F06A791D4973BD005BE736 /* DBExtendedRecord.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DBExtendedRecord.mm; sourceTree = ""; }; + B5F06A7A1D4973BD005BE736 /* DBExtendedRecord+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "DBExtendedRecord+Private.h"; sourceTree = ""; }; + B5F06A7B1D4973BD005BE736 /* DBExtendedRecord+Private.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "DBExtendedRecord+Private.mm"; sourceTree = ""; }; + B5F06A7F1D4973BD005BE736 /* DBObjcOnlyListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DBObjcOnlyListener.h; sourceTree = ""; }; + B5F06A801D4973BD005BE736 /* DBObjcOnlyListener+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "DBObjcOnlyListener+Private.h"; sourceTree = ""; }; + B5F06A811D4973BD005BE736 /* DBObjcOnlyListener+Private.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "DBObjcOnlyListener+Private.mm"; sourceTree = ""; }; + B5F06A971D497A66005BE736 /* extended_record.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = extended_record.cpp; sourceTree = ""; }; + B5F06A981D497A66005BE736 /* extended_record.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = extended_record.hpp; sourceTree = ""; }; + B5F06A991D497A66005BE736 /* optional.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = optional.hpp; sourceTree = ""; }; + B5F06A9B1D4987C7005BE736 /* enum_usage_interface.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = enum_usage_interface.hpp; sourceTree = ""; }; + B5F06A9C1D4987C7005BE736 /* enum_usage_record.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = enum_usage_record.hpp; sourceTree = ""; }; + B5F06A9D1D4987EF005BE736 /* DBColor+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "DBColor+Private.h"; sourceTree = ""; }; + B5F06A9E1D4987EF005BE736 /* DBEnumUsageInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DBEnumUsageInterface.h; sourceTree = ""; }; + B5F06A9F1D4987EF005BE736 /* DBEnumUsageInterface+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "DBEnumUsageInterface+Private.h"; sourceTree = ""; }; + B5F06AA01D4987EF005BE736 /* DBEnumUsageInterface+Private.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "DBEnumUsageInterface+Private.mm"; sourceTree = ""; }; + B5F06AA11D4987EF005BE736 /* DBEnumUsageRecord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DBEnumUsageRecord.h; sourceTree = ""; }; + B5F06AA21D4987EF005BE736 /* DBEnumUsageRecord.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DBEnumUsageRecord.mm; sourceTree = ""; }; + B5F06AA31D4987EF005BE736 /* DBEnumUsageRecord+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "DBEnumUsageRecord+Private.h"; sourceTree = ""; }; + B5F06AA41D4987EF005BE736 /* DBEnumUsageRecord+Private.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "DBEnumUsageRecord+Private.mm"; sourceTree = ""; }; CFAED8711B54291900E3B8A3 /* DBEmptyRecord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DBEmptyRecord.h; sourceTree = ""; }; CFAED8721B54291900E3B8A3 /* DBEmptyRecord.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DBEmptyRecord.mm; sourceTree = ""; }; CFAED8731B54291900E3B8A3 /* DBEmptyRecord+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "DBEmptyRecord+Private.h"; sourceTree = ""; }; @@ -409,7 +438,10 @@ 6536CD7519A6C98800DD7715 /* handwritten-cpp */ = { isa = PBXGroup; children = ( - 728E111E1D37DE1C005A554D /* wchar_test_helpers.cpp */, + B519111A1D542B0700772DFE /* wchar_test_helpers.cpp */, + B5F06A971D497A66005BE736 /* extended_record.cpp */, + B5F06A981D497A66005BE736 /* extended_record.hpp */, + B5F06A991D497A66005BE736 /* optional.hpp */, B5E9C9391C1F9D9D0073C123 /* reverse_client_interface_impl.cpp */, B5E9C93A1C1F9D9D0073C123 /* reverse_client_interface_impl.hpp */, 6536CD7619A6C98800DD7715 /* cpp_exception_impl.cpp */, @@ -486,22 +518,40 @@ A24249181AF192E0003BF8F0 /* generated-objc */ = { isa = PBXGroup; children = ( - 728E11141D37DE0B005A554D /* DBWcharTestHelpers.h */, - 728E11151D37DE0B005A554D /* DBWcharTestHelpers+Private.h */, - 728E11161D37DE0B005A554D /* DBWcharTestHelpers+Private.mm */, - 728E11171D37DE0B005A554D /* DBWcharTestRec.h */, - 728E11181D37DE0B005A554D /* DBWcharTestRec.mm */, - 728E11191D37DE0B005A554D /* DBWcharTestRec+Private.h */, - 728E111A1D37DE0B005A554D /* DBWcharTestRec+Private.mm */, - B5F06AA81D499379005BE736 /* DBUsesSingleLanguageListeners+Private.mm */, - B5F06AA91D499379005BE736 /* DBUsesSingleLanguageListeners+Private.h */, - B5F06AAA1D499379005BE736 /* DBUsesSingleLanguageListeners.h */, - B5F06AAB1D499379005BE736 /* DBObjcOnlyListener+Private.mm */, - B5F06AAC1D499379005BE736 /* DBObjcOnlyListener+Private.h */, - B5F06AAD1D499379005BE736 /* DBObjcOnlyListener.h */, - B5F06AAE1D499379005BE736 /* DBJavaOnlyListener+Private.mm */, - B5F06AAF1D499379005BE736 /* DBJavaOnlyListener+Private.h */, - B5F06AB01D499379005BE736 /* DBJavaOnlyListener.h */, + B51911151D542A7000772DFE /* DBWcharTestHelpers+Private.mm */, + B51911161D542A7000772DFE /* DBWcharTestHelpers+Private.h */, + B51911171D542A7000772DFE /* DBWcharTestHelpers.h */, + B5153F971D54284100012654 /* DBJavaOnlyListener+Private.mm */, + B5153F981D54284100012654 /* DBJavaOnlyListener+Private.h */, + B5153F991D54284100012654 /* DBJavaOnlyListener.h */, + B5153F891D54283700012654 /* DBWcharTestRec+Private.mm */, + B5153F8A1D54283700012654 /* DBWcharTestRec+Private.h */, + B5153F8B1D54283700012654 /* DBWcharTestRec.mm */, + B5153F8C1D54283700012654 /* DBWcharTestRec.h */, + B5153F901D54283700012654 /* DBUsesSingleLanguageListeners+Private.mm */, + B5153F911D54283700012654 /* DBUsesSingleLanguageListeners+Private.h */, + B5153F921D54283700012654 /* DBUsesSingleLanguageListeners.h */, + B5F06A9D1D4987EF005BE736 /* DBColor+Private.h */, + B5F06A9E1D4987EF005BE736 /* DBEnumUsageInterface.h */, + B5F06A9F1D4987EF005BE736 /* DBEnumUsageInterface+Private.h */, + B5F06AA01D4987EF005BE736 /* DBEnumUsageInterface+Private.mm */, + B5F06AA11D4987EF005BE736 /* DBEnumUsageRecord.h */, + B5F06AA21D4987EF005BE736 /* DBEnumUsageRecord.mm */, + B5F06AA31D4987EF005BE736 /* DBEnumUsageRecord+Private.h */, + B5F06AA41D4987EF005BE736 /* DBEnumUsageRecord+Private.mm */, + B5F06A6E1D4973BD005BE736 /* DBConflict.h */, + B5F06A6F1D4973BD005BE736 /* DBConflict+Private.h */, + B5F06A701D4973BD005BE736 /* DBConflict+Private.mm */, + B5F06A711D4973BD005BE736 /* DBConflictUser.h */, + B5F06A721D4973BD005BE736 /* DBConflictUser+Private.h */, + B5F06A731D4973BD005BE736 /* DBConflictUser+Private.mm */, + B5F06A781D4973BD005BE736 /* DBExtendedRecord.h */, + B5F06A791D4973BD005BE736 /* DBExtendedRecord.mm */, + B5F06A7A1D4973BD005BE736 /* DBExtendedRecord+Private.h */, + B5F06A7B1D4973BD005BE736 /* DBExtendedRecord+Private.mm */, + B5F06A7F1D4973BD005BE736 /* DBObjcOnlyListener.h */, + B5F06A801D4973BD005BE736 /* DBObjcOnlyListener+Private.h */, + B5F06A811D4973BD005BE736 /* DBObjcOnlyListener+Private.mm */, B5D8FC321C23E2F40045ADCF /* DBConstantRecord.h */, B5D8FC331C23E2F40045ADCF /* DBConstantRecord.mm */, B5D8FC341C23E2F40045ADCF /* DBConstantRecord+Private.h */, @@ -509,10 +559,6 @@ B5E9C93D1C1F9E9E0073C123 /* DBReverseClientInterface.h */, B5E9C93E1C1F9E9E0073C123 /* DBReverseClientInterface+Private.h */, B5E9C93F1C1F9E9E0073C123 /* DBReverseClientInterface+Private.mm */, - A209B5751BBA2A0A0070C310 /* DBOptColorRecord.h */, - A209B5761BBA2A0A0070C310 /* DBOptColorRecord.mm */, - A209B5771BBA2A0A0070C310 /* DBOptColorRecord+Private.h */, - A209B5781BBA2A0A0070C310 /* DBOptColorRecord+Private.mm */, B52DA5641B103F6D005CE75F /* DBAssortedPrimitives.h */, B52DA5651B103F6D005CE75F /* DBAssortedPrimitives.mm */, B52DA5661B103F6D005CE75F /* DBAssortedPrimitives+Private.h */, @@ -622,14 +668,19 @@ A242495D1AF192FC003BF8F0 /* generated-cpp */ = { isa = PBXGroup; children = ( - 728E11121D37DDFB005A554D /* wchar_test_helpers.hpp */, - 728E11131D37DDFB005A554D /* wchar_test_rec.hpp */, - B5F06AB41D49950C005BE736 /* uses_single_language_listeners.hpp */, - B5F06AB51D49950C005BE736 /* objc_only_listener.hpp */, - B5F06AB61D49950C005BE736 /* java_only_listener.hpp */, + B51911191D542AEC00772DFE /* wchar_test_helpers.hpp */, + B5153F871D54282C00012654 /* wchar_test_rec.hpp */, + B5F06A9B1D4987C7005BE736 /* enum_usage_interface.hpp */, + B5F06A9C1D4987C7005BE736 /* enum_usage_record.hpp */, + B5F06A651D497396005BE736 /* conflict_user.hpp */, + B5F06A661D497396005BE736 /* Conflict.hpp */, + B5F06A681D497396005BE736 /* extended_record_base.cpp */, + B5F06A691D497396005BE736 /* extended_record_base.hpp */, + B5F06A6A1D497396005BE736 /* java_only_listener.hpp */, + B5F06A6B1D497396005BE736 /* objc_only_listener.hpp */, + B5F06A6C1D497396005BE736 /* uses_single_language_listeners.hpp */, B5D8FC381C23E30D0045ADCF /* constant_record.hpp */, B5E9C93C1C1F9DCA0073C123 /* reverse_client_interface.hpp */, - A209B57B1BBA2A180070C310 /* opt_color_record.hpp */, B52DA56C1B103FBE005CE75F /* assorted_primitives.cpp */, B52DA56D1B103FBE005CE75F /* assorted_primitives.hpp */, A24249601AF192FC003BF8F0 /* client_interface.hpp */, @@ -753,8 +804,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + B5F06AA61D4987EF005BE736 /* DBEnumUsageRecord.mm in Sources */, A238CA981AF84B7100CDDCE5 /* DBMapRecord+Private.mm in Sources */, - 728E111B1D37DE0B005A554D /* DBWcharTestHelpers+Private.mm in Sources */, CFC5D9E81B1513E800BF2DF8 /* DBExternInterface1+Private.mm in Sources */, B5D8FC361C23E2F40045ADCF /* DBConstantRecord.mm in Sources */, A24850311AF96EBC00AFE907 /* DBSetRecord.mm in Sources */, @@ -762,13 +813,13 @@ 655168421C404B81003682A4 /* DBFirstListener+Private.mm in Sources */, A24850271AF96EBC00AFE907 /* DBClientReturnedRecord.mm in Sources */, CFC5D9D61B15106400BF2DF8 /* DBExternRecordWithDerivings.mm in Sources */, - B5F06AB31D499379005BE736 /* DBJavaOnlyListener+Private.mm in Sources */, CFC5DA0E1B15330000BF2DF8 /* record_with_duration_and_derivings.cpp in Sources */, A238CA941AF84B7100CDDCE5 /* DBMapDateRecord+Private.mm in Sources */, CFFD588F1B019E79001E10B6 /* DBTestHelpers+Private.mm in Sources */, A24850291AF96EBC00AFE907 /* DBDateRecord.mm in Sources */, A278D45319BA3601006FD937 /* test_helpers.cpp in Sources */, 6551684C1C4050A4003682A4 /* DBReturnOne+Private.mm in Sources */, + B5F06AA51D4987EF005BE736 /* DBEnumUsageInterface+Private.mm in Sources */, CFFD588D1B019E79001E10B6 /* DBCppException+Private.mm in Sources */, A238CA921AF84B7100CDDCE5 /* DBDateRecord+Private.mm in Sources */, A248502B1AF96EBC00AFE907 /* DBMapListRecord.mm in Sources */, @@ -778,32 +829,32 @@ CFF89B931B5D2CC7007F6EC2 /* date_record.cpp in Sources */, A24850301AF96EBC00AFE907 /* DBRecordWithNestedDerivings.mm in Sources */, CFFD58B11B041BD9001E10B6 /* DBConstantsInterface.mm in Sources */, - A209B5791BBA2A0A0070C310 /* DBOptColorRecord.mm in Sources */, B52DA56E1B103FC5005CE75F /* assorted_primitives.cpp in Sources */, CFFD58B31B041BD9001E10B6 /* DBConstantsInterface+Private.mm in Sources */, CFC5D9FC1B152E4300BF2DF8 /* TranslateDuration.cpp in Sources */, A248502F1AF96EBC00AFE907 /* DBRecordWithDerivings.mm in Sources */, + B5F06A851D4973BD005BE736 /* DBConflict+Private.mm in Sources */, A24249741AF192FC003BF8F0 /* constants.cpp in Sources */, CFFD588B1B019E79001E10B6 /* DBClientInterface+Private.mm in Sources */, B52DA5691B103F72005CE75F /* DBAssortedPrimitives.mm in Sources */, - B5F06AB21D499379005BE736 /* DBObjcOnlyListener+Private.mm in Sources */, A24850281AF96EBC00AFE907 /* DBConstants.mm in Sources */, 655168431C404B81003682A4 /* DBSecondListener+Private.mm in Sources */, CFFD58B71B041BFD001E10B6 /* constants_interface.cpp in Sources */, CFAED8751B54291900E3B8A3 /* DBEmptyRecord.mm in Sources */, - B5F06AB11D499379005BE736 /* DBUsesSingleLanguageListeners+Private.mm in Sources */, A238CA9A1AF84B7100CDDCE5 /* DBNestedCollection+Private.mm in Sources */, CFFD58911B019E79001E10B6 /* DBUserToken+Private.mm in Sources */, + B5153F9A1D54284100012654 /* DBJavaOnlyListener+Private.mm in Sources */, + B5F06A9A1D497A66005BE736 /* extended_record.cpp in Sources */, A2CB54B419BA6E6000A9E600 /* DJIError.mm in Sources */, B5E9C9401C1F9E9E0073C123 /* DBReverseClientInterface+Private.mm in Sources */, + B5F06A891D4973BD005BE736 /* DBExtendedRecord.mm in Sources */, A238CA961AF84B7100CDDCE5 /* DBMapListRecord+Private.mm in Sources */, A238CA9C1AF84B7100CDDCE5 /* DBPrimitiveList+Private.mm in Sources */, 650CA05A1C2AB48E007ADDDB /* DBListenerCaller+Private.mm in Sources */, A24249761AF192FC003BF8F0 /* record_with_nested_derivings.cpp in Sources */, CFC5DA081B1532F600BF2DF8 /* DBRecordWithDurationAndDerivings.mm in Sources */, A248502D1AF96EBC00AFE907 /* DBNestedCollection.mm in Sources */, - 728E111D1D37DE0B005A554D /* DBWcharTestRec+Private.mm in Sources */, - 728E111C1D37DE0B005A554D /* DBWcharTestRec.mm in Sources */, + B5F06A861D4973BD005BE736 /* DBConflictUser+Private.mm in Sources */, B5E9C93B1C1F9D9D0073C123 /* reverse_client_interface_impl.cpp in Sources */, CFC5D9D81B15106400BF2DF8 /* DBExternRecordWithDerivings+Private.mm in Sources */, A238CAA21AF84B7100CDDCE5 /* DBSetRecord+Private.mm in Sources */, @@ -812,18 +863,25 @@ 6551684F1C40511C003682A4 /* return_one_two.cpp in Sources */, A24249751AF192FC003BF8F0 /* record_with_derivings.cpp in Sources */, CFC5D9D01B15105100BF2DF8 /* extern_record_with_derivings.cpp in Sources */, + B51911181D542A7000772DFE /* DBWcharTestHelpers+Private.mm in Sources */, A238CA901AF84B7100CDDCE5 /* DBConstants+Private.mm in Sources */, CFC5D9EA1B1513E800BF2DF8 /* DBExternInterface2+Private.mm in Sources */, CFC5DA011B15318B00BF2DF8 /* DBTestDuration+Private.mm in Sources */, 650CA05E1C2AB5AB007ADDDB /* ListenerCaller.cpp in Sources */, A248502A1AF96EBC00AFE907 /* DBMapDateRecord.mm in Sources */, + B5F06A6D1D497396005BE736 /* extended_record_base.cpp in Sources */, A238CA8E1AF84B7100CDDCE5 /* DBClientReturnedRecord+Private.mm in Sources */, + B5F06A8A1D4973BD005BE736 /* DBExtendedRecord+Private.mm in Sources */, 6551684D1C4050A4003682A4 /* DBReturnTwo+Private.mm in Sources */, + B5F06AA71D4987EF005BE736 /* DBEnumUsageRecord+Private.mm in Sources */, B52DA56B1B103F75005CE75F /* DBAssortedPrimitives+Private.mm in Sources */, + B5153F941D54283700012654 /* DBWcharTestRec.mm in Sources */, + B5153F931D54283700012654 /* DBWcharTestRec+Private.mm in Sources */, A248502E1AF96EBC00AFE907 /* DBPrimitiveList.mm in Sources */, - A209B57A1BBA2A0A0070C310 /* DBOptColorRecord+Private.mm in Sources */, + B5F06A8C1D4973BD005BE736 /* DBObjcOnlyListener+Private.mm in Sources */, + B5153F961D54283700012654 /* DBUsesSingleLanguageListeners+Private.mm in Sources */, B5D8FC371C23E2F40045ADCF /* DBConstantRecord+Private.mm in Sources */, - 728E111F1D37DE1C005A554D /* wchar_test_helpers.cpp in Sources */, + B519111B1D542B0700772DFE /* wchar_test_helpers.cpp in Sources */, A238CAA01AF84B7100CDDCE5 /* DBRecordWithNestedDerivings+Private.mm in Sources */, CFC5DA0A1B1532F600BF2DF8 /* DBRecordWithDurationAndDerivings+Private.mm in Sources */, ); @@ -895,7 +953,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; @@ -939,7 +997,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; diff --git a/test-suite/run_djinni.sh b/test-suite/run_djinni.sh index a97bb7157..68d7d274d 100755 --- a/test-suite/run_djinni.sh +++ b/test-suite/run_djinni.sh @@ -75,7 +75,7 @@ fi --cpp-namespace testsuite \ --ident-cpp-enum-type foo_bar \ --cpp-optional-template "std::experimental::optional" \ - --cpp-optional-header "" \ + --cpp-optional-header "\"../../handwritten-src/cpp/optional.hpp\"" \ --cpp-extended-record-include-prefix "../../handwritten-src/cpp/" \ --cpp-use-wide-strings true \ \ @@ -104,7 +104,7 @@ fi --cpp-namespace testsuite \ --ident-cpp-enum-type foo_bar \ --cpp-optional-template "std::experimental::optional" \ - --cpp-optional-header "" \ + --cpp-optional-header "\"../../handwritten-src/cpp/optional.hpp\"" \ --cpp-extended-record-include-prefix "../../handwritten-src/cpp/" \ \ --jni-out "$temp_out_relative/jni" \ @@ -136,7 +136,7 @@ cp "$base_dir/djinni/yaml-test.djinni" "$temp_out/yaml" --cpp-out "$temp_out_relative/cpp" \ --ident-cpp-enum-type foo_bar \ --cpp-optional-template "std::experimental::optional" \ - --cpp-optional-header "" \ + --cpp-optional-header "\"../../handwritten-src/cpp/optional.hpp\"" \ \ --jni-out "$temp_out_relative/jni" \ --ident-jni-class NativeFooBar \