Commit 5d02d9f2 authored by Andrew Twyman's avatar Andrew Twyman

Testing and general fixes to constants

parent 17e8506d
......@@ -42,11 +42,17 @@ class CppGenerator(spec: Spec) extends Generator(spec) {
tm.args.foreach((x) => find(x, forwardDeclareOnly))
find(tm.base, forwardDeclareOnly)
}
def find(m: Meta, forwardDeclareOnly : Boolean) = for(r <- marshal.references(m, name, forwardDeclareOnly)) r match {
def find(m: Meta, forwardDeclareOnly : Boolean) = {
for(r <- marshal.hppReferences(m, name, forwardDeclareOnly)) r match {
case ImportRef(arg) => hpp.add("#include " + arg)
case DeclRef(decl, Some(spec.cppNamespace)) => hppFwds.add(decl)
case DeclRef(_, _) =>
}
for(r <- marshal.cppReferences(m, name, forwardDeclareOnly)) r match {
case ImportRef(arg) => cpp.add("#include " + arg)
case DeclRef(_, _) =>
}
}
}
override def generateEnum(origin: String, ident: Ident, doc: Doc, e: Enum) {
......@@ -98,7 +104,7 @@ class CppGenerator(spec: Spec) extends Generator(spec) {
case d: Double if marshal.fieldType(ty) == "float" => w.w(d.toString + "f")
case d: Double => w.w(d.toString)
case b: Boolean => w.w(if (b) "true" else "false")
case s: String => w.w(s)
case s: String => w.w("{" + s + "}")
case e: EnumValue => w.w(marshal.typename(ty) + "::" + idCpp.enum(e.ty.name + "_" + e.name))
case v: ConstRef => w.w(selfName + "::" + idCpp.const(v))
case z: Map[_, _] => { // Value is record
......
......@@ -32,7 +32,7 @@ class CppMarshal(spec: Spec) extends Marshal(spec) {
override def toCpp(tm: MExpr, expr: String): String = throw new AssertionError("cpp to cpp conversion")
override def fromCpp(tm: MExpr, expr: String): String = throw new AssertionError("cpp to cpp conversion")
def references(m: Meta, exclude: String, forwardDeclareOnly: Boolean): Seq[SymbolReference] = m match {
def hppReferences(m: Meta, exclude: String, forwardDeclareOnly: Boolean): Seq[SymbolReference] = m match {
case p: MPrimitive => p.idlName match {
case "i8" | "i16" | "i32" | "i64" => List(ImportRef("<cstdint>"))
case _ => List()
......@@ -85,6 +85,32 @@ class CppMarshal(spec: Spec) extends Marshal(spec) {
case p: MParam => List()
}
def cppReferences(m: Meta, exclude: String, forwardDeclareOnly: Boolean): Seq[SymbolReference] = {
// Only need to provide full definitions for cpp if forward decls were used in header
if (!forwardDeclareOnly) {
List()
} else {
m match {
case d: MDef => d.defType match {
case DRecord =>
if (d.name != exclude) {
List(ImportRef(include(d.name)))
} else {
List()
}
case DEnum =>
if (d.name != exclude) {
List(ImportRef(include(d.name)))
} else {
List()
}
case _ => List()
}
case _ => List()
}
}
}
def include(ident: String): String = q(spec.cppIncludePrefix + spec.cppFileIdentStyle(ident) + "." + spec.cppHeaderExt)
private def toCppType(ty: TypeRef, namespace: Option[String] = None): String = toCppType(ty.resolved, namespace)
......
......@@ -66,8 +66,9 @@ class JavaGenerator(spec: Spec) extends Generator(spec) {
def generateJavaConstants(w: IndentWriter, consts: Seq[Const]) = {
def writeJavaConst(w: IndentWriter, ty: TypeRef, v: Any): Unit = v match {
case l: Long if marshal.fieldType(ty).equalsIgnoreCase("long") => w.w(l.toString + "l")
case l: Long => w.w(l.toString)
case d: Double if marshal.fieldType(ty) == "float" => w.w(d.toString + "f")
case d: Double if marshal.fieldType(ty).equalsIgnoreCase("float") => w.w(d.toString + "f")
case d: Double => w.w(d.toString)
case b: Boolean => w.w(if (b) "true" else "false")
case s: String => w.w(s)
......
# Record containing constants
constants = record {
# Record for use in constants
constant_record = record {
some_integer: i32;
some_string: string;
}
# Record containing constants
constants = record {
# bool_constant has documentation.
const bool_constant: bool = true;
const i8_constant: i8 = 1;
......@@ -14,13 +17,28 @@ constants = record {
# (Second line of multi-line documentation.
# Indented third line of multi-line documentation.)
const f64_constant: f64 = 5.0;
const opt_bool_constant: optional<bool> = true;
const opt_i8_constant: optional<i8> = 1;
const opt_i16_constant: optional<i16> = 2;
const opt_i32_constant: optional<i32> = 3;
const opt_i64_constant: optional<i64> = 4;
const opt_f32_constant: optional<f32> = 5.0;
const opt_f64_constant: optional<f64> = 5.0;
const string_constant: string = "string-constant";
const optional_integer_constant: optional<i32> = 1;
const opt_string_constant: optional<string> = "string-constant";
const object_constant: constants = {
const object_constant: constant_record = {
some_integer = i32_constant,
some_string = string_constant
};
# No support for null optional constants
# No support for optional constant records
# No support for constant binary, list, set, map
const dummy: bool = false;
}
# Interface containing constants
......@@ -37,5 +55,25 @@ constants_interface = interface +c {
const f32_constant: f32 = 5.0;
const f64_constant: f64 = 5.0;
const opt_bool_constant: optional<bool> = true;
const opt_i8_constant: optional<i8> = 1;
const opt_i16_constant: optional<i16> = 2;
const opt_i32_constant: optional<i32> = 3;
const opt_i64_constant: optional<i64> = 4;
const opt_f32_constant: optional<f32> = 5.0;
const opt_f64_constant: optional<f64> = 5.0;
const string_constant: string = "string-constant";
const opt_string_constant: optional<string> = "string-constant";
const object_constant: constant_record = {
some_integer = i32_constant,
some_string = string_constant
};
# No support for null optional constants
# No support for optional constant records
# No support for constant binary, list, set, map
dummy();
}
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from constants.djinni
#pragma once
#include <cstdint>
#include <string>
#include <utility>
namespace testsuite {
/** Record for use in constants */
struct ConstantRecord final {
int32_t some_integer;
std::string some_string;
ConstantRecord(int32_t some_integer_,
std::string some_string_)
: some_integer(std::move(some_integer_))
, some_string(std::move(some_string_))
{}
};
} // namespace testsuite
......@@ -19,12 +19,28 @@ float const Constants::F32_CONSTANT = 5.0f;
double const Constants::F64_CONSTANT = 5.0;
std::string const Constants::STRING_CONSTANT = "string-constant";
std::experimental::optional<bool> const Constants::OPT_BOOL_CONSTANT = true;
std::experimental::optional<int32_t> const Constants::OPTIONAL_INTEGER_CONSTANT = 1;
std::experimental::optional<int8_t> const Constants::OPT_I8_CONSTANT = 1;
Constants const Constants::OBJECT_CONSTANT = Constants(
std::experimental::optional<int16_t> const Constants::OPT_I16_CONSTANT = 2;
std::experimental::optional<int32_t> const Constants::OPT_I32_CONSTANT = 3;
std::experimental::optional<int64_t> const Constants::OPT_I64_CONSTANT = 4;
std::experimental::optional<float> const Constants::OPT_F32_CONSTANT = 5.0;
std::experimental::optional<double> const Constants::OPT_F64_CONSTANT = 5.0;
std::string const Constants::STRING_CONSTANT = {"string-constant"};
std::experimental::optional<std::string> const Constants::OPT_STRING_CONSTANT = {"string-constant"};
ConstantRecord const Constants::OBJECT_CONSTANT = ConstantRecord(
Constants::I32_CONSTANT /* some_integer */ ,
Constants::STRING_CONSTANT /* some_string */ );
bool const Constants::DUMMY = false;
} // namespace testsuite
......@@ -3,6 +3,7 @@
#pragma once
#include "constant_record.hpp"
#include <cstdint>
#include <experimental/optional>
#include <string>
......@@ -33,19 +34,32 @@ struct Constants final {
*/
static double const F64_CONSTANT;
static std::experimental::optional<bool> const OPT_BOOL_CONSTANT;
static std::experimental::optional<int8_t> const OPT_I8_CONSTANT;
static std::experimental::optional<int16_t> const OPT_I16_CONSTANT;
static std::experimental::optional<int32_t> const OPT_I32_CONSTANT;
static std::experimental::optional<int64_t> const OPT_I64_CONSTANT;
static std::experimental::optional<float> const OPT_F32_CONSTANT;
static std::experimental::optional<double> const OPT_F64_CONSTANT;
static std::string const STRING_CONSTANT;
static std::experimental::optional<int32_t> const OPTIONAL_INTEGER_CONSTANT;
static std::experimental::optional<std::string> const OPT_STRING_CONSTANT;
static Constants const OBJECT_CONSTANT;
int32_t some_integer;
std::string some_string;
static ConstantRecord const OBJECT_CONSTANT;
Constants(int32_t some_integer_,
std::string some_string_)
: some_integer(std::move(some_integer_))
, some_string(std::move(some_string_))
{}
/**
* No support for null optional constants
* No support for optional constant records
* No support for constant binary, list, set, map
*/
static bool const DUMMY;
};
} // namespace testsuite
......@@ -2,6 +2,7 @@
// This file generated by Djinni from constants.djinni
#include "constants_interface.hpp" // my header
#include "constant_record.hpp"
namespace testsuite {
......@@ -19,4 +20,26 @@ float const ConstantsInterface::F32_CONSTANT = 5.0f;
double const ConstantsInterface::F64_CONSTANT = 5.0;
std::experimental::optional<bool> const ConstantsInterface::OPT_BOOL_CONSTANT = true;
std::experimental::optional<int8_t> const ConstantsInterface::OPT_I8_CONSTANT = 1;
std::experimental::optional<int16_t> const ConstantsInterface::OPT_I16_CONSTANT = 2;
std::experimental::optional<int32_t> const ConstantsInterface::OPT_I32_CONSTANT = 3;
std::experimental::optional<int64_t> const ConstantsInterface::OPT_I64_CONSTANT = 4;
std::experimental::optional<float> const ConstantsInterface::OPT_F32_CONSTANT = 5.0;
std::experimental::optional<double> const ConstantsInterface::OPT_F64_CONSTANT = 5.0;
std::string const ConstantsInterface::STRING_CONSTANT = {"string-constant"};
std::experimental::optional<std::string> const ConstantsInterface::OPT_STRING_CONSTANT = {"string-constant"};
ConstantRecord const ConstantsInterface::OBJECT_CONSTANT = ConstantRecord(
ConstantsInterface::I32_CONSTANT /* some_integer */ ,
ConstantsInterface::STRING_CONSTANT /* some_string */ );
} // namespace testsuite
......@@ -4,9 +4,13 @@
#pragma once
#include <cstdint>
#include <experimental/optional>
#include <string>
namespace testsuite {
struct ConstantRecord;
/** Interface containing constants */
class ConstantsInterface {
public:
......@@ -32,6 +36,31 @@ public:
static double const F64_CONSTANT;
static std::experimental::optional<bool> const OPT_BOOL_CONSTANT;
static std::experimental::optional<int8_t> const OPT_I8_CONSTANT;
static std::experimental::optional<int16_t> const OPT_I16_CONSTANT;
static std::experimental::optional<int32_t> const OPT_I32_CONSTANT;
static std::experimental::optional<int64_t> const OPT_I64_CONSTANT;
static std::experimental::optional<float> const OPT_F32_CONSTANT;
static std::experimental::optional<double> const OPT_F64_CONSTANT;
static std::string const STRING_CONSTANT;
static std::experimental::optional<std::string> const OPT_STRING_CONSTANT;
static ConstantRecord const OBJECT_CONSTANT;
/**
* No support for null optional constants
* No support for optional constant records
* No support for constant binary, list, set, map
*/
virtual void dummy() = 0;
};
......
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from constants.djinni
package com.dropbox.djinni.test;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
/** Record for use in constants */
public final class ConstantRecord {
/*package*/ final int mSomeInteger;
/*package*/ final String mSomeString;
public ConstantRecord(
int someInteger,
@Nonnull String someString) {
this.mSomeInteger = someInteger;
this.mSomeString = someString;
}
public int getSomeInteger() {
return mSomeInteger;
}
@Nonnull
public String getSomeString() {
return mSomeString;
}
@Override
public String toString() {
return "ConstantRecord{" +
"mSomeInteger=" + mSomeInteger +
"," + "mSomeString=" + mSomeString +
"}";
}
}
......@@ -18,7 +18,7 @@ public final class Constants {
public static final int I32_CONSTANT = 3;
public static final long I64_CONSTANT = 4;
public static final long I64_CONSTANT = 4l;
public static final float F32_CONSTANT = 5.0f;
......@@ -29,43 +29,53 @@ public final class Constants {
*/
public static final double F64_CONSTANT = 5.0;
@CheckForNull
public static final Boolean OPT_BOOL_CONSTANT = true;
@CheckForNull
public static final Byte OPT_I8_CONSTANT = 1;
@CheckForNull
public static final Short OPT_I16_CONSTANT = 2;
@CheckForNull
public static final Integer OPT_I32_CONSTANT = 3;
@CheckForNull
public static final Long OPT_I64_CONSTANT = 4l;
@CheckForNull
public static final Float OPT_F32_CONSTANT = 5.0f;
@CheckForNull
public static final Double OPT_F64_CONSTANT = 5.0;
@Nonnull
public static final String STRING_CONSTANT = "string-constant";
@CheckForNull
public static final Integer OPTIONAL_INTEGER_CONSTANT = 1;
public static final String OPT_STRING_CONSTANT = "string-constant";
@Nonnull
public static final Constants OBJECT_CONSTANT = new Constants(
public static final ConstantRecord OBJECT_CONSTANT = new ConstantRecord(
I32_CONSTANT /* mSomeInteger */ ,
STRING_CONSTANT /* mSomeString */ );
/**
* No support for null optional constants
* No support for optional constant records
* No support for constant binary, list, set, map
*/
public static final boolean DUMMY = false;
/*package*/ final int mSomeInteger;
/*package*/ final String mSomeString;
public Constants(
int someInteger,
@Nonnull String someString) {
this.mSomeInteger = someInteger;
this.mSomeString = someString;
}
public int getSomeInteger() {
return mSomeInteger;
}
@Nonnull
public String getSomeString() {
return mSomeString;
) {
}
@Override
public String toString() {
return "Constants{" +
"mSomeInteger=" + mSomeInteger +
"," + "mSomeString=" + mSomeString +
"}";
}
......
......@@ -23,12 +23,49 @@ public abstract class ConstantsInterface {
* (Second line of multi-line documentation.
* Indented third line of multi-line documentation.)
*/
public static final long I64_CONSTANT = 4;
public static final long I64_CONSTANT = 4l;
public static final float F32_CONSTANT = 5.0f;
public static final double F64_CONSTANT = 5.0;
@CheckForNull
public static final Boolean OPT_BOOL_CONSTANT = true;
@CheckForNull
public static final Byte OPT_I8_CONSTANT = 1;
@CheckForNull
public static final Short OPT_I16_CONSTANT = 2;
@CheckForNull
public static final Integer OPT_I32_CONSTANT = 3;
@CheckForNull
public static final Long OPT_I64_CONSTANT = 4l;
@CheckForNull
public static final Float OPT_F32_CONSTANT = 5.0f;
@CheckForNull
public static final Double OPT_F64_CONSTANT = 5.0;
@Nonnull
public static final String STRING_CONSTANT = "string-constant";
@CheckForNull
public static final String OPT_STRING_CONSTANT = "string-constant";
@Nonnull
public static final ConstantRecord OBJECT_CONSTANT = new ConstantRecord(
I32_CONSTANT /* mSomeInteger */ ,
STRING_CONSTANT /* mSomeString */ );
/**
* No support for null optional constants
* No support for optional constant records
* No support for constant binary, list, set, map
*/
public abstract void dummy();
private static final class CppProxy extends ConstantsInterface
......
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from constants.djinni
#include "NativeConstantRecord.hpp" // my header
#include "Marshal.hpp"
namespace djinni_generated {
NativeConstantRecord::NativeConstantRecord() = default;
NativeConstantRecord::~NativeConstantRecord() = default;
auto NativeConstantRecord::fromCpp(JNIEnv* jniEnv, const CppType& c) -> ::djinni::LocalRef<JniType> {
const auto& data = ::djinni::JniClass<NativeConstantRecord>::get();
auto r = ::djinni::LocalRef<JniType>{jniEnv->NewObject(data.clazz.get(), data.jconstructor,
::djinni::get(::djinni::I32::fromCpp(jniEnv, c.some_integer)),
::djinni::get(::djinni::String::fromCpp(jniEnv, c.some_string)))};
::djinni::jniExceptionCheck(jniEnv);
return r;
}
auto NativeConstantRecord::toCpp(JNIEnv* jniEnv, JniType j) -> CppType {
::djinni::JniLocalScope jscope(jniEnv, 3);
assert(j != nullptr);
const auto& data = ::djinni::JniClass<NativeConstantRecord>::get();
return {::djinni::I32::toCpp(jniEnv, jniEnv->GetIntField(j, data.field_mSomeInteger)),
::djinni::String::toCpp(jniEnv, (jstring)jniEnv->GetObjectField(j, data.field_mSomeString))};
}
} // namespace djinni_generated
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from constants.djinni
#pragma once
#include "constant_record.hpp"
#include "djinni_support.hpp"
namespace djinni_generated {
class NativeConstantRecord final {
public:
using CppType = ::testsuite::ConstantRecord;
using JniType = jobject;
using Boxed = NativeConstantRecord;
~NativeConstantRecord();
static CppType toCpp(JNIEnv* jniEnv, JniType j);
static ::djinni::LocalRef<JniType> fromCpp(JNIEnv* jniEnv, const CppType& c);
private:
NativeConstantRecord();
friend ::djinni::JniClass<NativeConstantRecord>;
const ::djinni::GlobalRef<jclass> clazz { ::djinni::jniFindClass("com/dropbox/djinni/test/ConstantRecord") };
const jmethodID jconstructor { ::djinni::jniGetMethodID(clazz.get(), "<init>", "(ILjava/lang/String;)V") };
const jfieldID field_mSomeInteger { ::djinni::jniGetFieldID(clazz.get(), "mSomeInteger", "I") };
const jfieldID field_mSomeString { ::djinni::jniGetFieldID(clazz.get(), "mSomeString", "Ljava/lang/String;") };
};
} // namespace djinni_generated
......@@ -2,7 +2,6 @@
// This file generated by Djinni from constants.djinni
#include "NativeConstants.hpp" // my header
#include "Marshal.hpp"
namespace djinni_generated {
......@@ -11,20 +10,18 @@ NativeConstants::NativeConstants() = default;
NativeConstants::~NativeConstants() = default;
auto NativeConstants::fromCpp(JNIEnv* jniEnv, const CppType& c) -> ::djinni::LocalRef<JniType> {
(void)c; // Suppress warnings in release builds for empty records
const auto& data = ::djinni::JniClass<NativeConstants>::get();
auto r = ::djinni::LocalRef<JniType>{jniEnv->NewObject(data.clazz.get(), data.jconstructor,
::djinni::get(::djinni::I32::fromCpp(jniEnv, c.some_integer)),
::djinni::get(::djinni::String::fromCpp(jniEnv, c.some_string)))};
auto r = ::djinni::LocalRef<JniType>{jniEnv->NewObject(data.clazz.get(), data.jconstructor)};
::djinni::jniExceptionCheck(jniEnv);
return r;
}
auto NativeConstants::toCpp(JNIEnv* jniEnv, JniType j) -> CppType {
::djinni::JniLocalScope jscope(jniEnv, 3);
::djinni::JniLocalScope jscope(jniEnv, 1);
assert(j != nullptr);
const auto& data = ::djinni::JniClass<NativeConstants>::get();
return {::djinni::I32::toCpp(jniEnv, jniEnv->GetIntField(j, data.field_mSomeInteger)),
::djinni::String::toCpp(jniEnv, (jstring)jniEnv->GetObjectField(j, data.field_mSomeString))};
(void)j; // Suppress warnings in release builds for empty records
return {};
}
} // namespace djinni_generated
......@@ -25,9 +25,7 @@ private:
friend ::djinni::JniClass<NativeConstants>;
const ::djinni::GlobalRef<jclass> clazz { ::djinni::jniFindClass("com/dropbox/djinni/test/Constants") };
const jmethodID jconstructor { ::djinni::jniGetMethodID(clazz.get(), "<init>", "(ILjava/lang/String;)V") };
const jfieldID field_mSomeInteger { ::djinni::jniGetFieldID(clazz.get(), "mSomeInteger", "I") };
const jfieldID field_mSomeString { ::djinni::jniGetFieldID(clazz.get(), "mSomeString", "Ljava/lang/String;") };
const jmethodID jconstructor { ::djinni::jniGetMethodID(clazz.get(), "<init>", "()V") };
};
} // namespace djinni_generated
......@@ -3,6 +3,7 @@
#include "NativeConstantsInterface.hpp" // my header
#include "Marshal.hpp"
#include "NativeConstantRecord.hpp"
namespace djinni_generated {
......
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from constants.djinni
#import "DBConstantRecord.h"
#include "constant_record.hpp"
static_assert(__has_feature(objc_arc), "Djinni requires ARC to be enabled for this file");
@class DBConstantRecord;
namespace djinni_generated {
struct ConstantRecord
{
using CppType = ::testsuite::ConstantRecord;
using ObjcType = DBConstantRecord*;
using Boxed = ConstantRecord;
static CppType toCpp(ObjcType objc);
static ObjcType fromCpp(const CppType& cpp);
};
} // namespace djinni_generated
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from constants.djinni
#import "DBConstantRecord+Private.h"
#import "DJIMarshal+Private.h"
#include <cassert>
namespace djinni_generated {
auto ConstantRecord::toCpp(ObjcType obj) -> CppType
{
assert(obj);
return {::djinni::I32::toCpp(obj.someInteger),
::djinni::String::toCpp(obj.someString)};
}
auto ConstantRecord::fromCpp(const CppType& cpp) -> ObjcType
{
return [[DBConstantRecord alloc] initWithSomeInteger:(::djinni::I32::fromCpp(cpp.some_integer))
someString:(::djinni::String::fromCpp(cpp.some_string))];
}
} // namespace djinni_generated
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from constants.djinni
#import <Foundation/Foundation.h>
/** Record for use in constants */
@interface DBConstantRecord : NSObject
- (nonnull instancetype)initWithSomeInteger:(int32_t)someInteger
someString:(nonnull NSString *)someString;
+ (nonnull instancetype)constantRecordWithSomeInteger:(int32_t)someInteger
someString:(nonnull NSString *)someString;
@property (nonatomic, readonly) int32_t someInteger;
@property (nonatomic, readonly, nonnull) NSString * someString;
@end
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from constants.djinni
#import "DBConstantRecord.h"
@implementation DBConstantRecord
- (nonnull instancetype)initWithSomeInteger:(int32_t)someInteger
someString:(nonnull NSString *)someString
{
if (self = [super init]) {
_someInteger = someInteger;
_someString = [someString copy];
}
return self;
}
+ (nonnull instancetype)constantRecordWithSomeInteger:(int32_t)someInteger
someString:(nonnull NSString *)someString
{
return [[self alloc] initWithSomeInteger:someInteger
someString:someString];
}
- (NSString *)description
{
return [NSString stringWithFormat:@"<%@ %p someInteger:%@ someString:%@>", self.class, self, @(self.someInteger), self.someString];
}
@end
......@@ -2,7 +2,7 @@
// This file generated by Djinni from constants.djinni
#import "DBConstants+Private.h"
#import "DBConstants+Private.h"
#import "DBConstantRecord+Private.h"
#import "DJIMarshal+Private.h"
#include <cassert>
......@@ -11,14 +11,14 @@ namespace djinni_generated {
auto Constants::toCpp(ObjcType obj) -> CppType
{
assert(obj);
return {::djinni::I32::toCpp(obj.someInteger),
::djinni::String::toCpp(obj.someString)};
(void)obj; // Suppress warnings in relase builds for empty records
return {};
}
auto Constants::fromCpp(const CppType& cpp) -> ObjcType
{
return [[DBConstants alloc] initWithSomeInteger:(::djinni::I32::fromCpp(cpp.some_integer))
someString:(::djinni::String::fromCpp(cpp.some_string))];
(void)cpp; // Suppress warnings in relase builds for empty records
return [[DBConstants alloc] init];
}
} // namespace djinni_generated
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from constants.djinni
#import "DBConstants.h"
#import "DBConstantRecord.h"
#import <Foundation/Foundation.h>
/** Record containing constants */
@interface DBConstants : NSObject
- (nonnull instancetype)initWithSomeInteger:(int32_t)someInteger
someString:(nonnull NSString *)someString;
+ (nonnull instancetype)constantsWithSomeInteger:(int32_t)someInteger
someString:(nonnull NSString *)someString;
@property (nonatomic, readonly) int32_t someInteger;
@property (nonatomic, readonly, nonnull) NSString * someString;
- (nonnull instancetype)init;
+ (nonnull instancetype)constants;
@end
......@@ -30,6 +24,19 @@ extern float const DBConstantsF32Constant;
* Indented third line of multi-line documentation.)
*/
extern double const DBConstantsF64Constant;
extern NSNumber * __nullable const DBConstantsOptBoolConstant;
extern NSNumber * __nullable const DBConstantsOptI8Constant;
extern NSNumber * __nullable const DBConstantsOptI16Constant;
extern NSNumber * __nullable const DBConstantsOptI32Constant;
extern NSNumber * __nullable const DBConstantsOptI64Constant;
extern NSNumber * __nullable const DBConstantsOptF32Constant;
extern NSNumber * __nullable const DBConstantsOptF64Constant;
extern NSString * __nonnull const DBConstantsStringConstant;
extern NSNumber * __nullable const DBConstantsOptionalIntegerConstant;
extern DBConstants * __nonnull const DBConstantsObjectConstant;
extern NSString * __nullable const DBConstantsOptStringConstant;
extern DBConstantRecord * __nonnull const DBConstantsObjectConstant;
/**
* No support for null optional constants
* No support for optional constant records
* No support for constant binary, list, set, map
*/
extern BOOL const DBConstantsDummy;
......@@ -20,37 +20,48 @@ float const DBConstantsF32Constant = 5.0f;
double const DBConstantsF64Constant = 5.0;
NSNumber * __nullable const DBConstantsOptBoolConstant = @YES;
NSNumber * __nullable const DBConstantsOptI8Constant = @1;
NSNumber * __nullable const DBConstantsOptI16Constant = @2;
NSNumber * __nullable const DBConstantsOptI32Constant = @3;
NSNumber * __nullable const DBConstantsOptI64Constant = @4;
NSNumber * __nullable const DBConstantsOptF32Constant = @5.0;
NSNumber * __nullable const DBConstantsOptF64Constant = @5.0;
NSString * __nonnull const DBConstantsStringConstant = @"string-constant";
NSNumber * __nullable const DBConstantsOptionalIntegerConstant = @1;
NSString * __nullable const DBConstantsOptStringConstant = @"string-constant";
DBConstants * __nonnull const DBConstantsObjectConstant = [[DBConstants alloc] initWithSomeInteger:DBConstantsI32Constant
DBConstantRecord * __nonnull const DBConstantsObjectConstant = [[DBConstantRecord alloc] initWithSomeInteger:DBConstantsI32Constant
someString:DBConstantsStringConstant];
BOOL const DBConstantsDummy = NO;
#pragma clang diagnostic pop
@implementation DBConstants
- (nonnull instancetype)initWithSomeInteger:(int32_t)someInteger
someString:(nonnull NSString *)someString
- (nonnull instancetype)init
{
if (self = [super init]) {
_someInteger = someInteger;
_someString = [someString copy];
}
return self;
}
+ (nonnull instancetype)constantsWithSomeInteger:(int32_t)someInteger
someString:(nonnull NSString *)someString
+ (nonnull instancetype)constants
{
return [[self alloc] initWithSomeInteger:someInteger
someString:someString];
return [[self alloc] init];
}
- (NSString *)description
{
return [NSString stringWithFormat:@"<%@ %p someInteger:%@ someString:%@>", self.class, self, @(self.someInteger), self.someString];
return [NSString stringWithFormat:@"<%@ %p>", self.class, self];
}
@end
......@@ -3,6 +3,7 @@
#import "DBConstantsInterface+Private.h"
#import "DBConstantsInterface.h"
#import "DBConstantRecord+Private.h"
#import "DJICppWrapperCache+Private.h"
#import "DJIError.h"
#import "DJIMarshal+Private.h"
......
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from constants.djinni
#import "DBConstantRecord.h"
#import <Foundation/Foundation.h>
extern BOOL const DBConstantsInterfaceBoolConstant;
......@@ -16,10 +17,25 @@ extern int32_t const DBConstantsInterfaceI32Constant;
extern int64_t const DBConstantsInterfaceI64Constant;
extern float const DBConstantsInterfaceF32Constant;
extern double const DBConstantsInterfaceF64Constant;
extern NSNumber * __nullable const DBConstantsInterfaceOptBoolConstant;
extern NSNumber * __nullable const DBConstantsInterfaceOptI8Constant;
extern NSNumber * __nullable const DBConstantsInterfaceOptI16Constant;
extern NSNumber * __nullable const DBConstantsInterfaceOptI32Constant;
extern NSNumber * __nullable const DBConstantsInterfaceOptI64Constant;
extern NSNumber * __nullable const DBConstantsInterfaceOptF32Constant;
extern NSNumber * __nullable const DBConstantsInterfaceOptF64Constant;
extern NSString * __nonnull const DBConstantsInterfaceStringConstant;
extern NSString * __nullable const DBConstantsInterfaceOptStringConstant;
extern DBConstantRecord * __nonnull const DBConstantsInterfaceObjectConstant;
/** Interface containing constants */
@interface DBConstantsInterface : NSObject
/**
* No support for null optional constants
* No support for optional constant records
* No support for constant binary, list, set, map
*/
- (void)dummy;
@end
......@@ -20,4 +20,25 @@ float const DBConstantsInterfaceF32Constant = 5.0f;
double const DBConstantsInterfaceF64Constant = 5.0;
NSNumber * __nullable const DBConstantsInterfaceOptBoolConstant = @YES;
NSNumber * __nullable const DBConstantsInterfaceOptI8Constant = @1;
NSNumber * __nullable const DBConstantsInterfaceOptI16Constant = @2;
NSNumber * __nullable const DBConstantsInterfaceOptI32Constant = @3;
NSNumber * __nullable const DBConstantsInterfaceOptI64Constant = @4;
NSNumber * __nullable const DBConstantsInterfaceOptF32Constant = @5.0;
NSNumber * __nullable const DBConstantsInterfaceOptF64Constant = @5.0;
NSString * __nonnull const DBConstantsInterfaceStringConstant = @"string-constant";
NSString * __nullable const DBConstantsInterfaceOptStringConstant = @"string-constant";
DBConstantRecord * __nonnull const DBConstantsInterfaceObjectConstant = [[DBConstantRecord alloc] initWithSomeInteger:DBConstantsInterfaceI32Constant
someString:DBConstantsInterfaceStringConstant];
#pragma clang diagnostic pop
......@@ -4,6 +4,7 @@ djinni-output-temp/cpp/record_with_duration_and_derivings.cpp
djinni-output-temp/cpp/date_record.hpp
djinni-output-temp/cpp/date_record.cpp
djinni-output-temp/cpp/map_date_record.hpp
djinni-output-temp/cpp/constant_record.hpp
djinni-output-temp/cpp/constants.hpp
djinni-output-temp/cpp/constants.cpp
djinni-output-temp/cpp/constants_interface.hpp
......@@ -32,6 +33,7 @@ djinni-output-temp/java/TestDuration.java
djinni-output-temp/java/RecordWithDurationAndDerivings.java
djinni-output-temp/java/DateRecord.java
djinni-output-temp/java/MapDateRecord.java
djinni-output-temp/java/ConstantRecord.java
djinni-output-temp/java/Constants.java
djinni-output-temp/java/ConstantsInterface.java
djinni-output-temp/java/AssortedPrimitives.java
......@@ -59,6 +61,8 @@ djinni-output-temp/jni/NativeDateRecord.hpp
djinni-output-temp/jni/NativeDateRecord.cpp
djinni-output-temp/jni/NativeMapDateRecord.hpp
djinni-output-temp/jni/NativeMapDateRecord.cpp
djinni-output-temp/jni/NativeConstantRecord.hpp
djinni-output-temp/jni/NativeConstantRecord.cpp
djinni-output-temp/jni/NativeConstants.hpp
djinni-output-temp/jni/NativeConstants.cpp
djinni-output-temp/jni/NativeConstantsInterface.hpp
......@@ -103,6 +107,8 @@ djinni-output-temp/objc/DBDateRecord.h
djinni-output-temp/objc/DBDateRecord.mm
djinni-output-temp/objc/DBMapDateRecord.h
djinni-output-temp/objc/DBMapDateRecord.mm
djinni-output-temp/objc/DBConstantRecord.h
djinni-output-temp/objc/DBConstantRecord.mm
djinni-output-temp/objc/DBConstants.h
djinni-output-temp/objc/DBConstants.mm
djinni-output-temp/objc/DBConstantsInterface.h
......@@ -143,6 +149,8 @@ djinni-output-temp/objc/DBDateRecord+Private.h
djinni-output-temp/objc/DBDateRecord+Private.mm
djinni-output-temp/objc/DBMapDateRecord+Private.h
djinni-output-temp/objc/DBMapDateRecord+Private.mm
djinni-output-temp/objc/DBConstantRecord+Private.h
djinni-output-temp/objc/DBConstantRecord+Private.mm
djinni-output-temp/objc/DBConstants+Private.h
djinni-output-temp/objc/DBConstants+Private.mm
djinni-output-temp/objc/DBConstantsInterface+Private.h
......
......@@ -60,6 +60,8 @@
B52DA56B1B103F75005CE75F /* DBAssortedPrimitives+Private.mm in Sources */ = {isa = PBXBuildFile; fileRef = B52DA5671B103F6D005CE75F /* DBAssortedPrimitives+Private.mm */; };
B52DA56E1B103FC5005CE75F /* assorted_primitives.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B52DA56C1B103FBE005CE75F /* assorted_primitives.cpp */; };
B52DA5701B104025005CE75F /* DBPrimitivesTests.m in Sources */ = {isa = PBXBuildFile; fileRef = B52DA56F1B104025005CE75F /* DBPrimitivesTests.m */; };
B5D8FC361C23E2F40045ADCF /* DBConstantRecord.mm in Sources */ = {isa = PBXBuildFile; fileRef = B5D8FC331C23E2F40045ADCF /* DBConstantRecord.mm */; };
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 */; };
CFAED8751B54291900E3B8A3 /* DBEmptyRecord.mm in Sources */ = {isa = PBXBuildFile; fileRef = CFAED8721B54291900E3B8A3 /* DBEmptyRecord.mm */; };
......@@ -237,6 +239,11 @@
B52DA56C1B103FBE005CE75F /* assorted_primitives.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = assorted_primitives.cpp; sourceTree = "<group>"; };
B52DA56D1B103FBE005CE75F /* assorted_primitives.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = assorted_primitives.hpp; sourceTree = "<group>"; };
B52DA56F1B104025005CE75F /* DBPrimitivesTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DBPrimitivesTests.m; sourceTree = "<group>"; };
B5D8FC321C23E2F40045ADCF /* DBConstantRecord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DBConstantRecord.h; sourceTree = "<group>"; };
B5D8FC331C23E2F40045ADCF /* DBConstantRecord.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DBConstantRecord.mm; sourceTree = "<group>"; };
B5D8FC341C23E2F40045ADCF /* DBConstantRecord+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "DBConstantRecord+Private.h"; sourceTree = "<group>"; };
B5D8FC351C23E2F40045ADCF /* DBConstantRecord+Private.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "DBConstantRecord+Private.mm"; sourceTree = "<group>"; };
B5D8FC381C23E30D0045ADCF /* constant_record.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = constant_record.hpp; sourceTree = "<group>"; };
B5E9C9391C1F9D9D0073C123 /* reverse_client_interface_impl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = reverse_client_interface_impl.cpp; sourceTree = "<group>"; };
B5E9C93A1C1F9D9D0073C123 /* reverse_client_interface_impl.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = reverse_client_interface_impl.hpp; sourceTree = "<group>"; };
B5E9C93C1C1F9DCA0073C123 /* reverse_client_interface.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = reverse_client_interface.hpp; sourceTree = "<group>"; };
......@@ -412,6 +419,10 @@
A24249181AF192E0003BF8F0 /* generated-objc */ = {
isa = PBXGroup;
children = (
B5D8FC321C23E2F40045ADCF /* DBConstantRecord.h */,
B5D8FC331C23E2F40045ADCF /* DBConstantRecord.mm */,
B5D8FC341C23E2F40045ADCF /* DBConstantRecord+Private.h */,
B5D8FC351C23E2F40045ADCF /* DBConstantRecord+Private.mm */,
B5E9C93D1C1F9E9E0073C123 /* DBReverseClientInterface.h */,
B5E9C93E1C1F9E9E0073C123 /* DBReverseClientInterface+Private.h */,
B5E9C93F1C1F9E9E0073C123 /* DBReverseClientInterface+Private.mm */,
......@@ -513,6 +524,7 @@
A242495D1AF192FC003BF8F0 /* generated-cpp */ = {
isa = PBXGroup;
children = (
B5D8FC381C23E30D0045ADCF /* constant_record.hpp */,
B5E9C93C1C1F9DCA0073C123 /* reverse_client_interface.hpp */,
A209B57B1BBA2A180070C310 /* opt_color_record.hpp */,
B52DA56C1B103FBE005CE75F /* assorted_primitives.cpp */,
......@@ -635,6 +647,7 @@
files = (
A238CA981AF84B7100CDDCE5 /* DBMapRecord+Private.mm in Sources */,
CFC5D9E81B1513E800BF2DF8 /* DBExternInterface1+Private.mm in Sources */,
B5D8FC361C23E2F40045ADCF /* DBConstantRecord.mm in Sources */,
A24850311AF96EBC00AFE907 /* DBSetRecord.mm in Sources */,
CFAED8761B54291900E3B8A3 /* DBEmptyRecord+Private.mm in Sources */,
A24850271AF96EBC00AFE907 /* DBClientReturnedRecord.mm in Sources */,
......@@ -688,6 +701,7 @@
B52DA56B1B103F75005CE75F /* DBAssortedPrimitives+Private.mm in Sources */,
A248502E1AF96EBC00AFE907 /* DBPrimitiveList.mm in Sources */,
A209B57A1BBA2A0A0070C310 /* DBOptColorRecord+Private.mm in Sources */,
B5D8FC371C23E2F40045ADCF /* DBConstantRecord+Private.mm in Sources */,
A238CAA01AF84B7100CDDCE5 /* DBRecordWithNestedDerivings+Private.mm in Sources */,
CFC5DA0A1B1532F600BF2DF8 /* DBRecordWithDurationAndDerivings+Private.mm in Sources */,
);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment