diff options
13 files changed, 484 insertions, 44 deletions
diff --git a/tests/android/aidl/tests/FixedSize.aidl b/tests/android/aidl/tests/FixedSize.aidl index 295199f3..56548c1f 100644 --- a/tests/android/aidl/tests/FixedSize.aidl +++ b/tests/android/aidl/tests/FixedSize.aidl @@ -27,6 +27,8 @@ parcelable FixedSize { int intValue; long longValue; float floatValue; + int[3] intArray; + long[3][2] multiDimensionLongArray; double doubleValue; LongEnum enumValue = LongEnum.FOO; FixedUnion parcelableValue; @@ -40,6 +42,8 @@ parcelable FixedSize { int intValue; long longValue; float floatValue; + int[3] intArray; + long[3][2] multiDimensionLongArray; double doubleValue; LongEnum enumValue; } diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/FixedSize.cpp b/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/FixedSize.cpp index b1a16ba9..dcce3622 100644 --- a/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/FixedSize.cpp +++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/FixedSize.cpp @@ -102,6 +102,22 @@ namespace tests { _aidl_parcel->setDataPosition(_aidl_start_pos + _aidl_parcelable_size); return _aidl_ret_status; } + _aidl_ret_status = _aidl_parcel->readFixedArray(&intArray); + if (((_aidl_ret_status) != (::android::OK))) { + return _aidl_ret_status; + } + if (_aidl_parcel->dataPosition() - _aidl_start_pos >= _aidl_parcelable_size) { + _aidl_parcel->setDataPosition(_aidl_start_pos + _aidl_parcelable_size); + return _aidl_ret_status; + } + _aidl_ret_status = _aidl_parcel->readFixedArray(&multiDimensionLongArray); + if (((_aidl_ret_status) != (::android::OK))) { + return _aidl_ret_status; + } + if (_aidl_parcel->dataPosition() - _aidl_start_pos >= _aidl_parcelable_size) { + _aidl_parcel->setDataPosition(_aidl_start_pos + _aidl_parcelable_size); + return _aidl_ret_status; + } _aidl_ret_status = _aidl_parcel->readDouble(&doubleValue); if (((_aidl_ret_status) != (::android::OK))) { return _aidl_ret_status; @@ -153,6 +169,14 @@ namespace tests { if (((_aidl_ret_status) != (::android::OK))) { return _aidl_ret_status; } + _aidl_ret_status = _aidl_parcel->writeFixedArray(intArray); + if (((_aidl_ret_status) != (::android::OK))) { + return _aidl_ret_status; + } + _aidl_ret_status = _aidl_parcel->writeFixedArray(multiDimensionLongArray); + if (((_aidl_ret_status) != (::android::OK))) { + return _aidl_ret_status; + } _aidl_ret_status = _aidl_parcel->writeDouble(doubleValue); if (((_aidl_ret_status) != (::android::OK))) { return _aidl_ret_status; @@ -244,6 +268,26 @@ namespace tests { set<floatValue>(std::move(_aidl_value)); } return ::android::OK; } + case intArray: { + std::array<int32_t, 3> _aidl_value; + if ((_aidl_ret_status = _aidl_parcel->readFixedArray(&_aidl_value)) != ::android::OK) return _aidl_ret_status; + if constexpr (std::is_trivially_copyable_v<std::array<int32_t, 3>>) { + set<intArray>(_aidl_value); + } else { + // NOLINTNEXTLINE(performance-move-const-arg) + set<intArray>(std::move(_aidl_value)); + } + return ::android::OK; } + case multiDimensionLongArray: { + std::array<std::array<int64_t, 2>, 3> _aidl_value; + if ((_aidl_ret_status = _aidl_parcel->readFixedArray(&_aidl_value)) != ::android::OK) return _aidl_ret_status; + if constexpr (std::is_trivially_copyable_v<std::array<std::array<int64_t, 2>, 3>>) { + set<multiDimensionLongArray>(_aidl_value); + } else { + // NOLINTNEXTLINE(performance-move-const-arg) + set<multiDimensionLongArray>(std::move(_aidl_value)); + } + return ::android::OK; } case doubleValue: { double _aidl_value; if ((_aidl_ret_status = _aidl_parcel->readDouble(&_aidl_value)) != ::android::OK) return _aidl_ret_status; @@ -277,6 +321,8 @@ namespace tests { case intValue: return _aidl_parcel->writeInt32(get<intValue>()); case longValue: return _aidl_parcel->writeInt64(get<longValue>()); case floatValue: return _aidl_parcel->writeFloat(get<floatValue>()); + case intArray: return _aidl_parcel->writeFixedArray(get<intArray>()); + case multiDimensionLongArray: return _aidl_parcel->writeFixedArray(get<multiDimensionLongArray>()); case doubleValue: return _aidl_parcel->writeDouble(get<doubleValue>()); case enumValue: return _aidl_parcel->writeInt64(static_cast<int64_t>(get<enumValue>())); } diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/FixedSize.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/FixedSize.h index 6fd07890..61a4c986 100644 --- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/FixedSize.h +++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/FixedSize.h @@ -38,8 +38,10 @@ public: intValue = 3, longValue = 4, floatValue = 5, - doubleValue = 6, - enumValue = 7, + intArray = 6, + multiDimensionLongArray = 7, + doubleValue = 8, + enumValue = 9, }; // Expose tag symbols for legacy code static const inline Tag booleanValue = Tag::booleanValue; @@ -48,11 +50,13 @@ public: static const inline Tag intValue = Tag::intValue; static const inline Tag longValue = Tag::longValue; static const inline Tag floatValue = Tag::floatValue; + static const inline Tag intArray = Tag::intArray; + static const inline Tag multiDimensionLongArray = Tag::multiDimensionLongArray; static const inline Tag doubleValue = Tag::doubleValue; static const inline Tag enumValue = Tag::enumValue; template <Tag _Tag> - using _at = typename std::tuple_element<static_cast<size_t>(_Tag), std::tuple<bool, int8_t, char16_t, int32_t, int64_t, float, double, ::android::aidl::tests::LongEnum>>::type; + using _at = typename std::tuple_element<static_cast<size_t>(_Tag), std::tuple<bool, int8_t, char16_t, int32_t, int64_t, float, std::array<int32_t, 3>, std::array<std::array<int64_t, 2>, 3>, double, ::android::aidl::tests::LongEnum>>::type; template <Tag _Tag, typename _Type> static FixedUnion make(_Type&& _arg) { FixedUnion _inst; @@ -128,6 +132,8 @@ public: case intValue: os << "intValue: " << ::android::internal::ToString(get<intValue>()); break; case longValue: os << "longValue: " << ::android::internal::ToString(get<longValue>()); break; case floatValue: os << "floatValue: " << ::android::internal::ToString(get<floatValue>()); break; + case intArray: os << "intArray: " << ::android::internal::ToString(get<intArray>()); break; + case multiDimensionLongArray: os << "multiDimensionLongArray: " << ::android::internal::ToString(get<multiDimensionLongArray>()); break; case doubleValue: os << "doubleValue: " << ::android::internal::ToString(get<doubleValue>()); break; case enumValue: os << "enumValue: " << ::android::internal::ToString(get<enumValue>()); break; } @@ -145,6 +151,8 @@ public: int32_t intValue __attribute__((aligned (4))); int64_t longValue __attribute__((aligned (8))); float floatValue __attribute__((aligned (4))); + std::array<int32_t, 3> intArray __attribute__((aligned (4))); + std::array<std::array<int64_t, 2>, 3> multiDimensionLongArray __attribute__((aligned (8))); double doubleValue __attribute__((aligned (8))); ::android::aidl::tests::LongEnum enumValue __attribute__((aligned (8))); } _value; @@ -157,14 +165,16 @@ public: int32_t intValue = 0; int64_t longValue = 0L; float floatValue = 0.000000f; + std::array<int32_t, 3> intArray = {{}}; + std::array<std::array<int64_t, 2>, 3> multiDimensionLongArray = {{}}; double doubleValue = 0.000000; ::android::aidl::tests::LongEnum enumValue = ::android::aidl::tests::LongEnum::FOO; ::android::aidl::tests::FixedSize::FixedUnion parcelableValue; inline bool operator==(const FixedParcelable& _rhs) const { - return std::tie(booleanValue, byteValue, charValue, intValue, longValue, floatValue, doubleValue, enumValue, parcelableValue) == std::tie(_rhs.booleanValue, _rhs.byteValue, _rhs.charValue, _rhs.intValue, _rhs.longValue, _rhs.floatValue, _rhs.doubleValue, _rhs.enumValue, _rhs.parcelableValue); + return std::tie(booleanValue, byteValue, charValue, intValue, longValue, floatValue, intArray, multiDimensionLongArray, doubleValue, enumValue, parcelableValue) == std::tie(_rhs.booleanValue, _rhs.byteValue, _rhs.charValue, _rhs.intValue, _rhs.longValue, _rhs.floatValue, _rhs.intArray, _rhs.multiDimensionLongArray, _rhs.doubleValue, _rhs.enumValue, _rhs.parcelableValue); } inline bool operator<(const FixedParcelable& _rhs) const { - return std::tie(booleanValue, byteValue, charValue, intValue, longValue, floatValue, doubleValue, enumValue, parcelableValue) < std::tie(_rhs.booleanValue, _rhs.byteValue, _rhs.charValue, _rhs.intValue, _rhs.longValue, _rhs.floatValue, _rhs.doubleValue, _rhs.enumValue, _rhs.parcelableValue); + return std::tie(booleanValue, byteValue, charValue, intValue, longValue, floatValue, intArray, multiDimensionLongArray, doubleValue, enumValue, parcelableValue) < std::tie(_rhs.booleanValue, _rhs.byteValue, _rhs.charValue, _rhs.intValue, _rhs.longValue, _rhs.floatValue, _rhs.intArray, _rhs.multiDimensionLongArray, _rhs.doubleValue, _rhs.enumValue, _rhs.parcelableValue); } inline bool operator!=(const FixedParcelable& _rhs) const { return !(*this == _rhs); @@ -194,6 +204,8 @@ public: _aidl_os << ", intValue: " << ::android::internal::ToString(intValue); _aidl_os << ", longValue: " << ::android::internal::ToString(longValue); _aidl_os << ", floatValue: " << ::android::internal::ToString(floatValue); + _aidl_os << ", intArray: " << ::android::internal::ToString(intArray); + _aidl_os << ", multiDimensionLongArray: " << ::android::internal::ToString(multiDimensionLongArray); _aidl_os << ", doubleValue: " << ::android::internal::ToString(doubleValue); _aidl_os << ", enumValue: " << ::android::internal::ToString(enumValue); _aidl_os << ", parcelableValue: " << ::android::internal::ToString(parcelableValue); @@ -253,6 +265,10 @@ namespace tests { return "longValue"; case FixedSize::FixedUnion::Tag::floatValue: return "floatValue"; + case FixedSize::FixedUnion::Tag::intArray: + return "intArray"; + case FixedSize::FixedUnion::Tag::multiDimensionLongArray: + return "multiDimensionLongArray"; case FixedSize::FixedUnion::Tag::doubleValue: return "doubleValue"; case FixedSize::FixedUnion::Tag::enumValue: @@ -269,13 +285,15 @@ namespace internal { #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wc++17-extensions" template <> -constexpr inline std::array<::android::aidl::tests::FixedSize::FixedUnion::Tag, 8> enum_values<::android::aidl::tests::FixedSize::FixedUnion::Tag> = { +constexpr inline std::array<::android::aidl::tests::FixedSize::FixedUnion::Tag, 10> enum_values<::android::aidl::tests::FixedSize::FixedUnion::Tag> = { ::android::aidl::tests::FixedSize::FixedUnion::Tag::booleanValue, ::android::aidl::tests::FixedSize::FixedUnion::Tag::byteValue, ::android::aidl::tests::FixedSize::FixedUnion::Tag::charValue, ::android::aidl::tests::FixedSize::FixedUnion::Tag::intValue, ::android::aidl::tests::FixedSize::FixedUnion::Tag::longValue, ::android::aidl::tests::FixedSize::FixedUnion::Tag::floatValue, + ::android::aidl::tests::FixedSize::FixedUnion::Tag::intArray, + ::android::aidl::tests::FixedSize::FixedUnion::Tag::multiDimensionLongArray, ::android::aidl::tests::FixedSize::FixedUnion::Tag::doubleValue, ::android::aidl::tests::FixedSize::FixedUnion::Tag::enumValue, }; diff --git a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/FixedSize.java b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/FixedSize.java index 0e13b1ac..f1d7c015 100644 --- a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/FixedSize.java +++ b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/FixedSize.java @@ -52,6 +52,8 @@ public class FixedSize implements android.os.Parcelable public int intValue = 0; public long longValue = 0L; public float floatValue = 0.000000f; + public int[] intArray; + public long[][] multiDimensionLongArray; public double doubleValue = 0.000000; public long enumValue = android.aidl.tests.LongEnum.FOO; public android.aidl.tests.FixedSize.FixedUnion parcelableValue; @@ -77,6 +79,8 @@ public class FixedSize implements android.os.Parcelable _aidl_parcel.writeInt(intValue); _aidl_parcel.writeLong(longValue); _aidl_parcel.writeFloat(floatValue); + _aidl_parcel.writeFixedArray(intArray, _aidl_flag, 3); + _aidl_parcel.writeFixedArray(multiDimensionLongArray, _aidl_flag, 3, 2); _aidl_parcel.writeDouble(doubleValue); _aidl_parcel.writeLong(enumValue); _aidl_parcel.writeTypedObject(parcelableValue, _aidl_flag); @@ -104,6 +108,10 @@ public class FixedSize implements android.os.Parcelable if (_aidl_parcel.dataPosition() - _aidl_start_pos >= _aidl_parcelable_size) return; floatValue = _aidl_parcel.readFloat(); if (_aidl_parcel.dataPosition() - _aidl_start_pos >= _aidl_parcelable_size) return; + intArray = _aidl_parcel.createFixedArray(int[].class, 3); + if (_aidl_parcel.dataPosition() - _aidl_start_pos >= _aidl_parcelable_size) return; + multiDimensionLongArray = _aidl_parcel.createFixedArray(long[][].class, 3, 2); + if (_aidl_parcel.dataPosition() - _aidl_start_pos >= _aidl_parcelable_size) return; doubleValue = _aidl_parcel.readDouble(); if (_aidl_parcel.dataPosition() - _aidl_start_pos >= _aidl_parcelable_size) return; enumValue = _aidl_parcel.readLong(); @@ -138,8 +146,10 @@ public class FixedSize implements android.os.Parcelable public final static int intValue = 3; // int intValue; public final static int longValue = 4; // long longValue; public final static int floatValue = 5; // float floatValue; - public final static int doubleValue = 6; // double doubleValue; - public final static int enumValue = 7; // android.aidl.tests.LongEnum enumValue; + public final static int intArray = 6; // int[3] intArray; + public final static int multiDimensionLongArray = 7; // long[3][2] multiDimensionLongArray; + public final static int doubleValue = 8; // double doubleValue; + public final static int enumValue = 9; // android.aidl.tests.LongEnum enumValue; private int _tag; private Object _value; @@ -253,6 +263,36 @@ public class FixedSize implements android.os.Parcelable _set(floatValue, _value); } + // int[3] intArray; + + public static FixedUnion intArray(int[] _value) { + return new FixedUnion(intArray, _value); + } + + public int[] getIntArray() { + _assertTag(intArray); + return (int[]) _value; + } + + public void setIntArray(int[] _value) { + _set(intArray, _value); + } + + // long[3][2] multiDimensionLongArray; + + public static FixedUnion multiDimensionLongArray(long[][] _value) { + return new FixedUnion(multiDimensionLongArray, _value); + } + + public long[][] getMultiDimensionLongArray() { + _assertTag(multiDimensionLongArray); + return (long[][]) _value; + } + + public void setMultiDimensionLongArray(long[][] _value) { + _set(multiDimensionLongArray, _value); + } + // double doubleValue; public static FixedUnion doubleValue(double _value) { @@ -316,6 +356,12 @@ public class FixedSize implements android.os.Parcelable case floatValue: _aidl_parcel.writeFloat(getFloatValue()); break; + case intArray: + _aidl_parcel.writeFixedArray(getIntArray(), _aidl_flag, 3); + break; + case multiDimensionLongArray: + _aidl_parcel.writeFixedArray(getMultiDimensionLongArray(), _aidl_flag, 3, 2); + break; case doubleValue: _aidl_parcel.writeDouble(getDoubleValue()); break; @@ -359,6 +405,16 @@ public class FixedSize implements android.os.Parcelable _aidl_value = _aidl_parcel.readFloat(); _set(_aidl_tag, _aidl_value); return; } + case intArray: { + int[] _aidl_value; + _aidl_value = _aidl_parcel.createFixedArray(int[].class, 3); + _set(_aidl_tag, _aidl_value); + return; } + case multiDimensionLongArray: { + long[][] _aidl_value; + _aidl_value = _aidl_parcel.createFixedArray(long[][].class, 3, 2); + _set(_aidl_tag, _aidl_value); + return; } case doubleValue: { double _aidl_value; _aidl_value = _aidl_parcel.readDouble(); @@ -395,6 +451,8 @@ public class FixedSize implements android.os.Parcelable case intValue: return "intValue"; case longValue: return "longValue"; case floatValue: return "floatValue"; + case intArray: return "intArray"; + case multiDimensionLongArray: return "multiDimensionLongArray"; case doubleValue: return "doubleValue"; case enumValue: return "enumValue"; } @@ -412,8 +470,10 @@ public class FixedSize implements android.os.Parcelable public static final byte intValue = 3; public static final byte longValue = 4; public static final byte floatValue = 5; - public static final byte doubleValue = 6; - public static final byte enumValue = 7; + public static final byte intArray = 6; + public static final byte multiDimensionLongArray = 7; + public static final byte doubleValue = 8; + public static final byte enumValue = 9; } } } diff --git a/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/FixedSize.cpp b/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/FixedSize.cpp index 1e58c5d4..36c9e685 100644 --- a/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/FixedSize.cpp +++ b/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/FixedSize.cpp @@ -102,6 +102,20 @@ binder_status_t FixedSize::FixedParcelable::readFromParcel(const AParcel* _aidl_ AParcel_setDataPosition(_aidl_parcel, _aidl_start_pos + _aidl_parcelable_size); return _aidl_ret_status; } + _aidl_ret_status = ::ndk::AParcel_readData(_aidl_parcel, &intArray); + if (_aidl_ret_status != STATUS_OK) return _aidl_ret_status; + + if (AParcel_getDataPosition(_aidl_parcel) - _aidl_start_pos >= _aidl_parcelable_size) { + AParcel_setDataPosition(_aidl_parcel, _aidl_start_pos + _aidl_parcelable_size); + return _aidl_ret_status; + } + _aidl_ret_status = ::ndk::AParcel_readData(_aidl_parcel, &multiDimensionLongArray); + if (_aidl_ret_status != STATUS_OK) return _aidl_ret_status; + + if (AParcel_getDataPosition(_aidl_parcel) - _aidl_start_pos >= _aidl_parcelable_size) { + AParcel_setDataPosition(_aidl_parcel, _aidl_start_pos + _aidl_parcelable_size); + return _aidl_ret_status; + } _aidl_ret_status = ::ndk::AParcel_readData(_aidl_parcel, &doubleValue); if (_aidl_ret_status != STATUS_OK) return _aidl_ret_status; @@ -146,6 +160,12 @@ binder_status_t FixedSize::FixedParcelable::writeToParcel(AParcel* _aidl_parcel) _aidl_ret_status = ::ndk::AParcel_writeData(_aidl_parcel, floatValue); if (_aidl_ret_status != STATUS_OK) return _aidl_ret_status; + _aidl_ret_status = ::ndk::AParcel_writeData(_aidl_parcel, intArray); + if (_aidl_ret_status != STATUS_OK) return _aidl_ret_status; + + _aidl_ret_status = ::ndk::AParcel_writeData(_aidl_parcel, multiDimensionLongArray); + if (_aidl_ret_status != STATUS_OK) return _aidl_ret_status; + _aidl_ret_status = ::ndk::AParcel_writeData(_aidl_parcel, doubleValue); if (_aidl_ret_status != STATUS_OK) return _aidl_ret_status; @@ -237,6 +257,26 @@ binder_status_t FixedSize::FixedUnion::readFromParcel(const AParcel* _parcel) { set<floatValue>(std::move(_aidl_value)); } return STATUS_OK; } + case intArray: { + std::array<int32_t, 3> _aidl_value; + if ((_aidl_ret_status = ::ndk::AParcel_readData(_parcel, &_aidl_value)) != STATUS_OK) return _aidl_ret_status; + if constexpr (std::is_trivially_copyable_v<std::array<int32_t, 3>>) { + set<intArray>(_aidl_value); + } else { + // NOLINTNEXTLINE(performance-move-const-arg) + set<intArray>(std::move(_aidl_value)); + } + return STATUS_OK; } + case multiDimensionLongArray: { + std::array<std::array<int64_t, 2>, 3> _aidl_value; + if ((_aidl_ret_status = ::ndk::AParcel_readData(_parcel, &_aidl_value)) != STATUS_OK) return _aidl_ret_status; + if constexpr (std::is_trivially_copyable_v<std::array<std::array<int64_t, 2>, 3>>) { + set<multiDimensionLongArray>(_aidl_value); + } else { + // NOLINTNEXTLINE(performance-move-const-arg) + set<multiDimensionLongArray>(std::move(_aidl_value)); + } + return STATUS_OK; } case doubleValue: { double _aidl_value; if ((_aidl_ret_status = ::ndk::AParcel_readData(_parcel, &_aidl_value)) != STATUS_OK) return _aidl_ret_status; @@ -270,6 +310,8 @@ binder_status_t FixedSize::FixedUnion::writeToParcel(AParcel* _parcel) const { case intValue: return ::ndk::AParcel_writeData(_parcel, get<intValue>()); case longValue: return ::ndk::AParcel_writeData(_parcel, get<longValue>()); case floatValue: return ::ndk::AParcel_writeData(_parcel, get<floatValue>()); + case intArray: return ::ndk::AParcel_writeData(_parcel, get<intArray>()); + case multiDimensionLongArray: return ::ndk::AParcel_writeData(_parcel, get<multiDimensionLongArray>()); case doubleValue: return ::ndk::AParcel_writeData(_parcel, get<doubleValue>()); case enumValue: return ::ndk::AParcel_writeData(_parcel, get<enumValue>()); } diff --git a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/FixedSize.h b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/FixedSize.h index 08c230f8..059831b3 100644 --- a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/FixedSize.h +++ b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/FixedSize.h @@ -50,8 +50,10 @@ public: intValue = 3, longValue = 4, floatValue = 5, - doubleValue = 6, - enumValue = 7, + intArray = 6, + multiDimensionLongArray = 7, + doubleValue = 8, + enumValue = 9, }; // Expose tag symbols for legacy code @@ -61,11 +63,13 @@ public: static const inline Tag intValue = Tag::intValue; static const inline Tag longValue = Tag::longValue; static const inline Tag floatValue = Tag::floatValue; + static const inline Tag intArray = Tag::intArray; + static const inline Tag multiDimensionLongArray = Tag::multiDimensionLongArray; static const inline Tag doubleValue = Tag::doubleValue; static const inline Tag enumValue = Tag::enumValue; template <Tag _Tag> - using _at = typename std::tuple_element<static_cast<size_t>(_Tag), std::tuple<bool, int8_t, char16_t, int32_t, int64_t, float, double, ::aidl::android::aidl::tests::LongEnum>>::type; + using _at = typename std::tuple_element<static_cast<size_t>(_Tag), std::tuple<bool, int8_t, char16_t, int32_t, int64_t, float, std::array<int32_t, 3>, std::array<std::array<int64_t, 2>, 3>, double, ::aidl::android::aidl::tests::LongEnum>>::type; template <Tag _Tag, typename _Type> static FixedUnion make(_Type&& _arg) { FixedUnion _inst; @@ -139,6 +143,8 @@ public: case intValue: os << "intValue: " << ::android::internal::ToString(get<intValue>()); break; case longValue: os << "longValue: " << ::android::internal::ToString(get<longValue>()); break; case floatValue: os << "floatValue: " << ::android::internal::ToString(get<floatValue>()); break; + case intArray: os << "intArray: " << ::android::internal::ToString(get<intArray>()); break; + case multiDimensionLongArray: os << "multiDimensionLongArray: " << ::android::internal::ToString(get<multiDimensionLongArray>()); break; case doubleValue: os << "doubleValue: " << ::android::internal::ToString(get<doubleValue>()); break; case enumValue: os << "enumValue: " << ::android::internal::ToString(get<enumValue>()); break; } @@ -156,6 +162,8 @@ public: int32_t intValue __attribute__((aligned (4))); int64_t longValue __attribute__((aligned (8))); float floatValue __attribute__((aligned (4))); + std::array<int32_t, 3> intArray __attribute__((aligned (4))); + std::array<std::array<int64_t, 2>, 3> multiDimensionLongArray __attribute__((aligned (8))); double doubleValue __attribute__((aligned (8))); ::aidl::android::aidl::tests::LongEnum enumValue __attribute__((aligned (8))); } _value; @@ -171,6 +179,8 @@ public: int32_t intValue __attribute__((aligned (4))) = 0; int64_t longValue __attribute__((aligned (8))) = 0L; float floatValue __attribute__((aligned (4))) = 0.000000f; + std::array<int32_t, 3> intArray __attribute__((aligned (4))) = {{}}; + std::array<std::array<int64_t, 2>, 3> multiDimensionLongArray __attribute__((aligned (8))) = {{}}; double doubleValue __attribute__((aligned (8))) = 0.000000; ::aidl::android::aidl::tests::LongEnum enumValue __attribute__((aligned (8))) = ::aidl::android::aidl::tests::LongEnum::FOO; ::aidl::android::aidl::tests::FixedSize::FixedUnion parcelableValue; @@ -179,10 +189,10 @@ public: binder_status_t writeToParcel(AParcel* parcel) const; inline bool operator==(const FixedParcelable& _rhs) const { - return std::tie(booleanValue, byteValue, charValue, intValue, longValue, floatValue, doubleValue, enumValue, parcelableValue) == std::tie(_rhs.booleanValue, _rhs.byteValue, _rhs.charValue, _rhs.intValue, _rhs.longValue, _rhs.floatValue, _rhs.doubleValue, _rhs.enumValue, _rhs.parcelableValue); + return std::tie(booleanValue, byteValue, charValue, intValue, longValue, floatValue, intArray, multiDimensionLongArray, doubleValue, enumValue, parcelableValue) == std::tie(_rhs.booleanValue, _rhs.byteValue, _rhs.charValue, _rhs.intValue, _rhs.longValue, _rhs.floatValue, _rhs.intArray, _rhs.multiDimensionLongArray, _rhs.doubleValue, _rhs.enumValue, _rhs.parcelableValue); } inline bool operator<(const FixedParcelable& _rhs) const { - return std::tie(booleanValue, byteValue, charValue, intValue, longValue, floatValue, doubleValue, enumValue, parcelableValue) < std::tie(_rhs.booleanValue, _rhs.byteValue, _rhs.charValue, _rhs.intValue, _rhs.longValue, _rhs.floatValue, _rhs.doubleValue, _rhs.enumValue, _rhs.parcelableValue); + return std::tie(booleanValue, byteValue, charValue, intValue, longValue, floatValue, intArray, multiDimensionLongArray, doubleValue, enumValue, parcelableValue) < std::tie(_rhs.booleanValue, _rhs.byteValue, _rhs.charValue, _rhs.intValue, _rhs.longValue, _rhs.floatValue, _rhs.intArray, _rhs.multiDimensionLongArray, _rhs.doubleValue, _rhs.enumValue, _rhs.parcelableValue); } inline bool operator!=(const FixedParcelable& _rhs) const { return !(*this == _rhs); @@ -207,6 +217,8 @@ public: _aidl_os << ", intValue: " << ::android::internal::ToString(intValue); _aidl_os << ", longValue: " << ::android::internal::ToString(longValue); _aidl_os << ", floatValue: " << ::android::internal::ToString(floatValue); + _aidl_os << ", intArray: " << ::android::internal::ToString(intArray); + _aidl_os << ", multiDimensionLongArray: " << ::android::internal::ToString(multiDimensionLongArray); _aidl_os << ", doubleValue: " << ::android::internal::ToString(doubleValue); _aidl_os << ", enumValue: " << ::android::internal::ToString(enumValue); _aidl_os << ", parcelableValue: " << ::android::internal::ToString(parcelableValue); @@ -267,6 +279,10 @@ namespace tests { return "longValue"; case FixedSize::FixedUnion::Tag::floatValue: return "floatValue"; + case FixedSize::FixedUnion::Tag::intArray: + return "intArray"; + case FixedSize::FixedUnion::Tag::multiDimensionLongArray: + return "multiDimensionLongArray"; case FixedSize::FixedUnion::Tag::doubleValue: return "doubleValue"; case FixedSize::FixedUnion::Tag::enumValue: @@ -284,13 +300,15 @@ namespace internal { #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wc++17-extensions" template <> -constexpr inline std::array<aidl::android::aidl::tests::FixedSize::FixedUnion::Tag, 8> enum_values<aidl::android::aidl::tests::FixedSize::FixedUnion::Tag> = { +constexpr inline std::array<aidl::android::aidl::tests::FixedSize::FixedUnion::Tag, 10> enum_values<aidl::android::aidl::tests::FixedSize::FixedUnion::Tag> = { aidl::android::aidl::tests::FixedSize::FixedUnion::Tag::booleanValue, aidl::android::aidl::tests::FixedSize::FixedUnion::Tag::byteValue, aidl::android::aidl::tests::FixedSize::FixedUnion::Tag::charValue, aidl::android::aidl::tests::FixedSize::FixedUnion::Tag::intValue, aidl::android::aidl::tests::FixedSize::FixedUnion::Tag::longValue, aidl::android::aidl::tests::FixedSize::FixedUnion::Tag::floatValue, + aidl::android::aidl::tests::FixedSize::FixedUnion::Tag::intArray, + aidl::android::aidl::tests::FixedSize::FixedUnion::Tag::multiDimensionLongArray, aidl::android::aidl::tests::FixedSize::FixedUnion::Tag::doubleValue, aidl::android::aidl::tests::FixedSize::FixedUnion::Tag::enumValue, }; diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/FixedSize.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/FixedSize.rs index 5fbba287..6036573c 100644 --- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/FixedSize.rs +++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/FixedSize.rs @@ -39,6 +39,8 @@ pub mod r#FixedParcelable { pub r#intValue: i32, pub r#longValue: i64, pub r#floatValue: f32, + pub r#intArray: [i32; 3], + pub r#multiDimensionLongArray: [[i64; 2]; 3], pub r#doubleValue: f64, pub r#enumValue: crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum, pub r#parcelableValue: crate::mangled::_7_android_4_aidl_5_tests_9_FixedSize_10_FixedUnion, @@ -52,6 +54,8 @@ pub mod r#FixedParcelable { r#intValue: 0, r#longValue: 0, r#floatValue: 0.000000f32, + r#intArray: [Default::default(), Default::default(), Default::default()], + r#multiDimensionLongArray: [[Default::default(), Default::default()], [Default::default(), Default::default()], [Default::default(), Default::default()]], r#doubleValue: 0.000000f64, r#enumValue: crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum::FOO, r#parcelableValue: Default::default(), @@ -67,6 +71,8 @@ pub mod r#FixedParcelable { subparcel.write(&self.r#intValue)?; subparcel.write(&self.r#longValue)?; subparcel.write(&self.r#floatValue)?; + subparcel.write(&self.r#intArray)?; + subparcel.write(&self.r#multiDimensionLongArray)?; subparcel.write(&self.r#doubleValue)?; subparcel.write(&self.r#enumValue)?; subparcel.write(&self.r#parcelableValue)?; @@ -94,6 +100,12 @@ pub mod r#FixedParcelable { self.r#floatValue = subparcel.read()?; } if subparcel.has_more_data() { + self.r#intArray = subparcel.read()?; + } + if subparcel.has_more_data() { + self.r#multiDimensionLongArray = subparcel.read()?; + } + if subparcel.has_more_data() { self.r#doubleValue = subparcel.read()?; } if subparcel.has_more_data() { @@ -121,6 +133,8 @@ pub mod r#FixedUnion { IntValue(i32), LongValue(i64), FloatValue(f32), + IntArray([i32; 3]), + MultiDimensionLongArray([[i64; 2]; 3]), DoubleValue(f64), EnumValue(crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum), } @@ -156,14 +170,22 @@ pub mod r#FixedUnion { parcel.write(&5i32)?; parcel.write(v) } - Self::DoubleValue(v) => { + Self::IntArray(v) => { parcel.write(&6i32)?; parcel.write(v) } - Self::EnumValue(v) => { + Self::MultiDimensionLongArray(v) => { parcel.write(&7i32)?; parcel.write(v) } + Self::DoubleValue(v) => { + parcel.write(&8i32)?; + parcel.write(v) + } + Self::EnumValue(v) => { + parcel.write(&9i32)?; + parcel.write(v) + } } } fn read_from_parcel(&mut self, parcel: &binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> { @@ -200,11 +222,21 @@ pub mod r#FixedUnion { Ok(()) } 6 => { + let value: [i32; 3] = parcel.read()?; + *self = Self::IntArray(value); + Ok(()) + } + 7 => { + let value: [[i64; 2]; 3] = parcel.read()?; + *self = Self::MultiDimensionLongArray(value); + Ok(()) + } + 8 => { let value: f64 = parcel.read()?; *self = Self::DoubleValue(value); Ok(()) } - 7 => { + 9 => { let value: crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum = parcel.read()?; *self = Self::EnumValue(value); Ok(()) @@ -224,15 +256,17 @@ pub mod r#FixedUnion { #![allow(non_upper_case_globals)] use binder::declare_binder_enum; declare_binder_enum! { - r#Tag : [i8; 8] { + r#Tag : [i8; 10] { r#booleanValue = 0, r#byteValue = 1, r#charValue = 2, r#intValue = 3, r#longValue = 4, r#floatValue = 5, - r#doubleValue = 6, - r#enumValue = 7, + r#intArray = 6, + r#multiDimensionLongArray = 7, + r#doubleValue = 8, + r#enumValue = 9, } } } diff --git a/tests/golden_output/frozen/aidl-test-interface-cpp-source/gen/android/aidl/tests/FixedSize.cpp b/tests/golden_output/frozen/aidl-test-interface-cpp-source/gen/android/aidl/tests/FixedSize.cpp index b1a16ba9..dcce3622 100644 --- a/tests/golden_output/frozen/aidl-test-interface-cpp-source/gen/android/aidl/tests/FixedSize.cpp +++ b/tests/golden_output/frozen/aidl-test-interface-cpp-source/gen/android/aidl/tests/FixedSize.cpp @@ -102,6 +102,22 @@ namespace tests { _aidl_parcel->setDataPosition(_aidl_start_pos + _aidl_parcelable_size); return _aidl_ret_status; } + _aidl_ret_status = _aidl_parcel->readFixedArray(&intArray); + if (((_aidl_ret_status) != (::android::OK))) { + return _aidl_ret_status; + } + if (_aidl_parcel->dataPosition() - _aidl_start_pos >= _aidl_parcelable_size) { + _aidl_parcel->setDataPosition(_aidl_start_pos + _aidl_parcelable_size); + return _aidl_ret_status; + } + _aidl_ret_status = _aidl_parcel->readFixedArray(&multiDimensionLongArray); + if (((_aidl_ret_status) != (::android::OK))) { + return _aidl_ret_status; + } + if (_aidl_parcel->dataPosition() - _aidl_start_pos >= _aidl_parcelable_size) { + _aidl_parcel->setDataPosition(_aidl_start_pos + _aidl_parcelable_size); + return _aidl_ret_status; + } _aidl_ret_status = _aidl_parcel->readDouble(&doubleValue); if (((_aidl_ret_status) != (::android::OK))) { return _aidl_ret_status; @@ -153,6 +169,14 @@ namespace tests { if (((_aidl_ret_status) != (::android::OK))) { return _aidl_ret_status; } + _aidl_ret_status = _aidl_parcel->writeFixedArray(intArray); + if (((_aidl_ret_status) != (::android::OK))) { + return _aidl_ret_status; + } + _aidl_ret_status = _aidl_parcel->writeFixedArray(multiDimensionLongArray); + if (((_aidl_ret_status) != (::android::OK))) { + return _aidl_ret_status; + } _aidl_ret_status = _aidl_parcel->writeDouble(doubleValue); if (((_aidl_ret_status) != (::android::OK))) { return _aidl_ret_status; @@ -244,6 +268,26 @@ namespace tests { set<floatValue>(std::move(_aidl_value)); } return ::android::OK; } + case intArray: { + std::array<int32_t, 3> _aidl_value; + if ((_aidl_ret_status = _aidl_parcel->readFixedArray(&_aidl_value)) != ::android::OK) return _aidl_ret_status; + if constexpr (std::is_trivially_copyable_v<std::array<int32_t, 3>>) { + set<intArray>(_aidl_value); + } else { + // NOLINTNEXTLINE(performance-move-const-arg) + set<intArray>(std::move(_aidl_value)); + } + return ::android::OK; } + case multiDimensionLongArray: { + std::array<std::array<int64_t, 2>, 3> _aidl_value; + if ((_aidl_ret_status = _aidl_parcel->readFixedArray(&_aidl_value)) != ::android::OK) return _aidl_ret_status; + if constexpr (std::is_trivially_copyable_v<std::array<std::array<int64_t, 2>, 3>>) { + set<multiDimensionLongArray>(_aidl_value); + } else { + // NOLINTNEXTLINE(performance-move-const-arg) + set<multiDimensionLongArray>(std::move(_aidl_value)); + } + return ::android::OK; } case doubleValue: { double _aidl_value; if ((_aidl_ret_status = _aidl_parcel->readDouble(&_aidl_value)) != ::android::OK) return _aidl_ret_status; @@ -277,6 +321,8 @@ namespace tests { case intValue: return _aidl_parcel->writeInt32(get<intValue>()); case longValue: return _aidl_parcel->writeInt64(get<longValue>()); case floatValue: return _aidl_parcel->writeFloat(get<floatValue>()); + case intArray: return _aidl_parcel->writeFixedArray(get<intArray>()); + case multiDimensionLongArray: return _aidl_parcel->writeFixedArray(get<multiDimensionLongArray>()); case doubleValue: return _aidl_parcel->writeDouble(get<doubleValue>()); case enumValue: return _aidl_parcel->writeInt64(static_cast<int64_t>(get<enumValue>())); } diff --git a/tests/golden_output/frozen/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/FixedSize.h b/tests/golden_output/frozen/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/FixedSize.h index 6fd07890..61a4c986 100644 --- a/tests/golden_output/frozen/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/FixedSize.h +++ b/tests/golden_output/frozen/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/FixedSize.h @@ -38,8 +38,10 @@ public: intValue = 3, longValue = 4, floatValue = 5, - doubleValue = 6, - enumValue = 7, + intArray = 6, + multiDimensionLongArray = 7, + doubleValue = 8, + enumValue = 9, }; // Expose tag symbols for legacy code static const inline Tag booleanValue = Tag::booleanValue; @@ -48,11 +50,13 @@ public: static const inline Tag intValue = Tag::intValue; static const inline Tag longValue = Tag::longValue; static const inline Tag floatValue = Tag::floatValue; + static const inline Tag intArray = Tag::intArray; + static const inline Tag multiDimensionLongArray = Tag::multiDimensionLongArray; static const inline Tag doubleValue = Tag::doubleValue; static const inline Tag enumValue = Tag::enumValue; template <Tag _Tag> - using _at = typename std::tuple_element<static_cast<size_t>(_Tag), std::tuple<bool, int8_t, char16_t, int32_t, int64_t, float, double, ::android::aidl::tests::LongEnum>>::type; + using _at = typename std::tuple_element<static_cast<size_t>(_Tag), std::tuple<bool, int8_t, char16_t, int32_t, int64_t, float, std::array<int32_t, 3>, std::array<std::array<int64_t, 2>, 3>, double, ::android::aidl::tests::LongEnum>>::type; template <Tag _Tag, typename _Type> static FixedUnion make(_Type&& _arg) { FixedUnion _inst; @@ -128,6 +132,8 @@ public: case intValue: os << "intValue: " << ::android::internal::ToString(get<intValue>()); break; case longValue: os << "longValue: " << ::android::internal::ToString(get<longValue>()); break; case floatValue: os << "floatValue: " << ::android::internal::ToString(get<floatValue>()); break; + case intArray: os << "intArray: " << ::android::internal::ToString(get<intArray>()); break; + case multiDimensionLongArray: os << "multiDimensionLongArray: " << ::android::internal::ToString(get<multiDimensionLongArray>()); break; case doubleValue: os << "doubleValue: " << ::android::internal::ToString(get<doubleValue>()); break; case enumValue: os << "enumValue: " << ::android::internal::ToString(get<enumValue>()); break; } @@ -145,6 +151,8 @@ public: int32_t intValue __attribute__((aligned (4))); int64_t longValue __attribute__((aligned (8))); float floatValue __attribute__((aligned (4))); + std::array<int32_t, 3> intArray __attribute__((aligned (4))); + std::array<std::array<int64_t, 2>, 3> multiDimensionLongArray __attribute__((aligned (8))); double doubleValue __attribute__((aligned (8))); ::android::aidl::tests::LongEnum enumValue __attribute__((aligned (8))); } _value; @@ -157,14 +165,16 @@ public: int32_t intValue = 0; int64_t longValue = 0L; float floatValue = 0.000000f; + std::array<int32_t, 3> intArray = {{}}; + std::array<std::array<int64_t, 2>, 3> multiDimensionLongArray = {{}}; double doubleValue = 0.000000; ::android::aidl::tests::LongEnum enumValue = ::android::aidl::tests::LongEnum::FOO; ::android::aidl::tests::FixedSize::FixedUnion parcelableValue; inline bool operator==(const FixedParcelable& _rhs) const { - return std::tie(booleanValue, byteValue, charValue, intValue, longValue, floatValue, doubleValue, enumValue, parcelableValue) == std::tie(_rhs.booleanValue, _rhs.byteValue, _rhs.charValue, _rhs.intValue, _rhs.longValue, _rhs.floatValue, _rhs.doubleValue, _rhs.enumValue, _rhs.parcelableValue); + return std::tie(booleanValue, byteValue, charValue, intValue, longValue, floatValue, intArray, multiDimensionLongArray, doubleValue, enumValue, parcelableValue) == std::tie(_rhs.booleanValue, _rhs.byteValue, _rhs.charValue, _rhs.intValue, _rhs.longValue, _rhs.floatValue, _rhs.intArray, _rhs.multiDimensionLongArray, _rhs.doubleValue, _rhs.enumValue, _rhs.parcelableValue); } inline bool operator<(const FixedParcelable& _rhs) const { - return std::tie(booleanValue, byteValue, charValue, intValue, longValue, floatValue, doubleValue, enumValue, parcelableValue) < std::tie(_rhs.booleanValue, _rhs.byteValue, _rhs.charValue, _rhs.intValue, _rhs.longValue, _rhs.floatValue, _rhs.doubleValue, _rhs.enumValue, _rhs.parcelableValue); + return std::tie(booleanValue, byteValue, charValue, intValue, longValue, floatValue, intArray, multiDimensionLongArray, doubleValue, enumValue, parcelableValue) < std::tie(_rhs.booleanValue, _rhs.byteValue, _rhs.charValue, _rhs.intValue, _rhs.longValue, _rhs.floatValue, _rhs.intArray, _rhs.multiDimensionLongArray, _rhs.doubleValue, _rhs.enumValue, _rhs.parcelableValue); } inline bool operator!=(const FixedParcelable& _rhs) const { return !(*this == _rhs); @@ -194,6 +204,8 @@ public: _aidl_os << ", intValue: " << ::android::internal::ToString(intValue); _aidl_os << ", longValue: " << ::android::internal::ToString(longValue); _aidl_os << ", floatValue: " << ::android::internal::ToString(floatValue); + _aidl_os << ", intArray: " << ::android::internal::ToString(intArray); + _aidl_os << ", multiDimensionLongArray: " << ::android::internal::ToString(multiDimensionLongArray); _aidl_os << ", doubleValue: " << ::android::internal::ToString(doubleValue); _aidl_os << ", enumValue: " << ::android::internal::ToString(enumValue); _aidl_os << ", parcelableValue: " << ::android::internal::ToString(parcelableValue); @@ -253,6 +265,10 @@ namespace tests { return "longValue"; case FixedSize::FixedUnion::Tag::floatValue: return "floatValue"; + case FixedSize::FixedUnion::Tag::intArray: + return "intArray"; + case FixedSize::FixedUnion::Tag::multiDimensionLongArray: + return "multiDimensionLongArray"; case FixedSize::FixedUnion::Tag::doubleValue: return "doubleValue"; case FixedSize::FixedUnion::Tag::enumValue: @@ -269,13 +285,15 @@ namespace internal { #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wc++17-extensions" template <> -constexpr inline std::array<::android::aidl::tests::FixedSize::FixedUnion::Tag, 8> enum_values<::android::aidl::tests::FixedSize::FixedUnion::Tag> = { +constexpr inline std::array<::android::aidl::tests::FixedSize::FixedUnion::Tag, 10> enum_values<::android::aidl::tests::FixedSize::FixedUnion::Tag> = { ::android::aidl::tests::FixedSize::FixedUnion::Tag::booleanValue, ::android::aidl::tests::FixedSize::FixedUnion::Tag::byteValue, ::android::aidl::tests::FixedSize::FixedUnion::Tag::charValue, ::android::aidl::tests::FixedSize::FixedUnion::Tag::intValue, ::android::aidl::tests::FixedSize::FixedUnion::Tag::longValue, ::android::aidl::tests::FixedSize::FixedUnion::Tag::floatValue, + ::android::aidl::tests::FixedSize::FixedUnion::Tag::intArray, + ::android::aidl::tests::FixedSize::FixedUnion::Tag::multiDimensionLongArray, ::android::aidl::tests::FixedSize::FixedUnion::Tag::doubleValue, ::android::aidl::tests::FixedSize::FixedUnion::Tag::enumValue, }; diff --git a/tests/golden_output/frozen/aidl-test-interface-java-source/gen/android/aidl/tests/FixedSize.java b/tests/golden_output/frozen/aidl-test-interface-java-source/gen/android/aidl/tests/FixedSize.java index 0e13b1ac..f1d7c015 100644 --- a/tests/golden_output/frozen/aidl-test-interface-java-source/gen/android/aidl/tests/FixedSize.java +++ b/tests/golden_output/frozen/aidl-test-interface-java-source/gen/android/aidl/tests/FixedSize.java @@ -52,6 +52,8 @@ public class FixedSize implements android.os.Parcelable public int intValue = 0; public long longValue = 0L; public float floatValue = 0.000000f; + public int[] intArray; + public long[][] multiDimensionLongArray; public double doubleValue = 0.000000; public long enumValue = android.aidl.tests.LongEnum.FOO; public android.aidl.tests.FixedSize.FixedUnion parcelableValue; @@ -77,6 +79,8 @@ public class FixedSize implements android.os.Parcelable _aidl_parcel.writeInt(intValue); _aidl_parcel.writeLong(longValue); _aidl_parcel.writeFloat(floatValue); + _aidl_parcel.writeFixedArray(intArray, _aidl_flag, 3); + _aidl_parcel.writeFixedArray(multiDimensionLongArray, _aidl_flag, 3, 2); _aidl_parcel.writeDouble(doubleValue); _aidl_parcel.writeLong(enumValue); _aidl_parcel.writeTypedObject(parcelableValue, _aidl_flag); @@ -104,6 +108,10 @@ public class FixedSize implements android.os.Parcelable if (_aidl_parcel.dataPosition() - _aidl_start_pos >= _aidl_parcelable_size) return; floatValue = _aidl_parcel.readFloat(); if (_aidl_parcel.dataPosition() - _aidl_start_pos >= _aidl_parcelable_size) return; + intArray = _aidl_parcel.createFixedArray(int[].class, 3); + if (_aidl_parcel.dataPosition() - _aidl_start_pos >= _aidl_parcelable_size) return; + multiDimensionLongArray = _aidl_parcel.createFixedArray(long[][].class, 3, 2); + if (_aidl_parcel.dataPosition() - _aidl_start_pos >= _aidl_parcelable_size) return; doubleValue = _aidl_parcel.readDouble(); if (_aidl_parcel.dataPosition() - _aidl_start_pos >= _aidl_parcelable_size) return; enumValue = _aidl_parcel.readLong(); @@ -138,8 +146,10 @@ public class FixedSize implements android.os.Parcelable public final static int intValue = 3; // int intValue; public final static int longValue = 4; // long longValue; public final static int floatValue = 5; // float floatValue; - public final static int doubleValue = 6; // double doubleValue; - public final static int enumValue = 7; // android.aidl.tests.LongEnum enumValue; + public final static int intArray = 6; // int[3] intArray; + public final static int multiDimensionLongArray = 7; // long[3][2] multiDimensionLongArray; + public final static int doubleValue = 8; // double doubleValue; + public final static int enumValue = 9; // android.aidl.tests.LongEnum enumValue; private int _tag; private Object _value; @@ -253,6 +263,36 @@ public class FixedSize implements android.os.Parcelable _set(floatValue, _value); } + // int[3] intArray; + + public static FixedUnion intArray(int[] _value) { + return new FixedUnion(intArray, _value); + } + + public int[] getIntArray() { + _assertTag(intArray); + return (int[]) _value; + } + + public void setIntArray(int[] _value) { + _set(intArray, _value); + } + + // long[3][2] multiDimensionLongArray; + + public static FixedUnion multiDimensionLongArray(long[][] _value) { + return new FixedUnion(multiDimensionLongArray, _value); + } + + public long[][] getMultiDimensionLongArray() { + _assertTag(multiDimensionLongArray); + return (long[][]) _value; + } + + public void setMultiDimensionLongArray(long[][] _value) { + _set(multiDimensionLongArray, _value); + } + // double doubleValue; public static FixedUnion doubleValue(double _value) { @@ -316,6 +356,12 @@ public class FixedSize implements android.os.Parcelable case floatValue: _aidl_parcel.writeFloat(getFloatValue()); break; + case intArray: + _aidl_parcel.writeFixedArray(getIntArray(), _aidl_flag, 3); + break; + case multiDimensionLongArray: + _aidl_parcel.writeFixedArray(getMultiDimensionLongArray(), _aidl_flag, 3, 2); + break; case doubleValue: _aidl_parcel.writeDouble(getDoubleValue()); break; @@ -359,6 +405,16 @@ public class FixedSize implements android.os.Parcelable _aidl_value = _aidl_parcel.readFloat(); _set(_aidl_tag, _aidl_value); return; } + case intArray: { + int[] _aidl_value; + _aidl_value = _aidl_parcel.createFixedArray(int[].class, 3); + _set(_aidl_tag, _aidl_value); + return; } + case multiDimensionLongArray: { + long[][] _aidl_value; + _aidl_value = _aidl_parcel.createFixedArray(long[][].class, 3, 2); + _set(_aidl_tag, _aidl_value); + return; } case doubleValue: { double _aidl_value; _aidl_value = _aidl_parcel.readDouble(); @@ -395,6 +451,8 @@ public class FixedSize implements android.os.Parcelable case intValue: return "intValue"; case longValue: return "longValue"; case floatValue: return "floatValue"; + case intArray: return "intArray"; + case multiDimensionLongArray: return "multiDimensionLongArray"; case doubleValue: return "doubleValue"; case enumValue: return "enumValue"; } @@ -412,8 +470,10 @@ public class FixedSize implements android.os.Parcelable public static final byte intValue = 3; public static final byte longValue = 4; public static final byte floatValue = 5; - public static final byte doubleValue = 6; - public static final byte enumValue = 7; + public static final byte intArray = 6; + public static final byte multiDimensionLongArray = 7; + public static final byte doubleValue = 8; + public static final byte enumValue = 9; } } } diff --git a/tests/golden_output/frozen/aidl-test-interface-ndk-source/gen/android/aidl/tests/FixedSize.cpp b/tests/golden_output/frozen/aidl-test-interface-ndk-source/gen/android/aidl/tests/FixedSize.cpp index 1e58c5d4..36c9e685 100644 --- a/tests/golden_output/frozen/aidl-test-interface-ndk-source/gen/android/aidl/tests/FixedSize.cpp +++ b/tests/golden_output/frozen/aidl-test-interface-ndk-source/gen/android/aidl/tests/FixedSize.cpp @@ -102,6 +102,20 @@ binder_status_t FixedSize::FixedParcelable::readFromParcel(const AParcel* _aidl_ AParcel_setDataPosition(_aidl_parcel, _aidl_start_pos + _aidl_parcelable_size); return _aidl_ret_status; } + _aidl_ret_status = ::ndk::AParcel_readData(_aidl_parcel, &intArray); + if (_aidl_ret_status != STATUS_OK) return _aidl_ret_status; + + if (AParcel_getDataPosition(_aidl_parcel) - _aidl_start_pos >= _aidl_parcelable_size) { + AParcel_setDataPosition(_aidl_parcel, _aidl_start_pos + _aidl_parcelable_size); + return _aidl_ret_status; + } + _aidl_ret_status = ::ndk::AParcel_readData(_aidl_parcel, &multiDimensionLongArray); + if (_aidl_ret_status != STATUS_OK) return _aidl_ret_status; + + if (AParcel_getDataPosition(_aidl_parcel) - _aidl_start_pos >= _aidl_parcelable_size) { + AParcel_setDataPosition(_aidl_parcel, _aidl_start_pos + _aidl_parcelable_size); + return _aidl_ret_status; + } _aidl_ret_status = ::ndk::AParcel_readData(_aidl_parcel, &doubleValue); if (_aidl_ret_status != STATUS_OK) return _aidl_ret_status; @@ -146,6 +160,12 @@ binder_status_t FixedSize::FixedParcelable::writeToParcel(AParcel* _aidl_parcel) _aidl_ret_status = ::ndk::AParcel_writeData(_aidl_parcel, floatValue); if (_aidl_ret_status != STATUS_OK) return _aidl_ret_status; + _aidl_ret_status = ::ndk::AParcel_writeData(_aidl_parcel, intArray); + if (_aidl_ret_status != STATUS_OK) return _aidl_ret_status; + + _aidl_ret_status = ::ndk::AParcel_writeData(_aidl_parcel, multiDimensionLongArray); + if (_aidl_ret_status != STATUS_OK) return _aidl_ret_status; + _aidl_ret_status = ::ndk::AParcel_writeData(_aidl_parcel, doubleValue); if (_aidl_ret_status != STATUS_OK) return _aidl_ret_status; @@ -237,6 +257,26 @@ binder_status_t FixedSize::FixedUnion::readFromParcel(const AParcel* _parcel) { set<floatValue>(std::move(_aidl_value)); } return STATUS_OK; } + case intArray: { + std::array<int32_t, 3> _aidl_value; + if ((_aidl_ret_status = ::ndk::AParcel_readData(_parcel, &_aidl_value)) != STATUS_OK) return _aidl_ret_status; + if constexpr (std::is_trivially_copyable_v<std::array<int32_t, 3>>) { + set<intArray>(_aidl_value); + } else { + // NOLINTNEXTLINE(performance-move-const-arg) + set<intArray>(std::move(_aidl_value)); + } + return STATUS_OK; } + case multiDimensionLongArray: { + std::array<std::array<int64_t, 2>, 3> _aidl_value; + if ((_aidl_ret_status = ::ndk::AParcel_readData(_parcel, &_aidl_value)) != STATUS_OK) return _aidl_ret_status; + if constexpr (std::is_trivially_copyable_v<std::array<std::array<int64_t, 2>, 3>>) { + set<multiDimensionLongArray>(_aidl_value); + } else { + // NOLINTNEXTLINE(performance-move-const-arg) + set<multiDimensionLongArray>(std::move(_aidl_value)); + } + return STATUS_OK; } case doubleValue: { double _aidl_value; if ((_aidl_ret_status = ::ndk::AParcel_readData(_parcel, &_aidl_value)) != STATUS_OK) return _aidl_ret_status; @@ -270,6 +310,8 @@ binder_status_t FixedSize::FixedUnion::writeToParcel(AParcel* _parcel) const { case intValue: return ::ndk::AParcel_writeData(_parcel, get<intValue>()); case longValue: return ::ndk::AParcel_writeData(_parcel, get<longValue>()); case floatValue: return ::ndk::AParcel_writeData(_parcel, get<floatValue>()); + case intArray: return ::ndk::AParcel_writeData(_parcel, get<intArray>()); + case multiDimensionLongArray: return ::ndk::AParcel_writeData(_parcel, get<multiDimensionLongArray>()); case doubleValue: return ::ndk::AParcel_writeData(_parcel, get<doubleValue>()); case enumValue: return ::ndk::AParcel_writeData(_parcel, get<enumValue>()); } diff --git a/tests/golden_output/frozen/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/FixedSize.h b/tests/golden_output/frozen/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/FixedSize.h index 08c230f8..059831b3 100644 --- a/tests/golden_output/frozen/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/FixedSize.h +++ b/tests/golden_output/frozen/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/FixedSize.h @@ -50,8 +50,10 @@ public: intValue = 3, longValue = 4, floatValue = 5, - doubleValue = 6, - enumValue = 7, + intArray = 6, + multiDimensionLongArray = 7, + doubleValue = 8, + enumValue = 9, }; // Expose tag symbols for legacy code @@ -61,11 +63,13 @@ public: static const inline Tag intValue = Tag::intValue; static const inline Tag longValue = Tag::longValue; static const inline Tag floatValue = Tag::floatValue; + static const inline Tag intArray = Tag::intArray; + static const inline Tag multiDimensionLongArray = Tag::multiDimensionLongArray; static const inline Tag doubleValue = Tag::doubleValue; static const inline Tag enumValue = Tag::enumValue; template <Tag _Tag> - using _at = typename std::tuple_element<static_cast<size_t>(_Tag), std::tuple<bool, int8_t, char16_t, int32_t, int64_t, float, double, ::aidl::android::aidl::tests::LongEnum>>::type; + using _at = typename std::tuple_element<static_cast<size_t>(_Tag), std::tuple<bool, int8_t, char16_t, int32_t, int64_t, float, std::array<int32_t, 3>, std::array<std::array<int64_t, 2>, 3>, double, ::aidl::android::aidl::tests::LongEnum>>::type; template <Tag _Tag, typename _Type> static FixedUnion make(_Type&& _arg) { FixedUnion _inst; @@ -139,6 +143,8 @@ public: case intValue: os << "intValue: " << ::android::internal::ToString(get<intValue>()); break; case longValue: os << "longValue: " << ::android::internal::ToString(get<longValue>()); break; case floatValue: os << "floatValue: " << ::android::internal::ToString(get<floatValue>()); break; + case intArray: os << "intArray: " << ::android::internal::ToString(get<intArray>()); break; + case multiDimensionLongArray: os << "multiDimensionLongArray: " << ::android::internal::ToString(get<multiDimensionLongArray>()); break; case doubleValue: os << "doubleValue: " << ::android::internal::ToString(get<doubleValue>()); break; case enumValue: os << "enumValue: " << ::android::internal::ToString(get<enumValue>()); break; } @@ -156,6 +162,8 @@ public: int32_t intValue __attribute__((aligned (4))); int64_t longValue __attribute__((aligned (8))); float floatValue __attribute__((aligned (4))); + std::array<int32_t, 3> intArray __attribute__((aligned (4))); + std::array<std::array<int64_t, 2>, 3> multiDimensionLongArray __attribute__((aligned (8))); double doubleValue __attribute__((aligned (8))); ::aidl::android::aidl::tests::LongEnum enumValue __attribute__((aligned (8))); } _value; @@ -171,6 +179,8 @@ public: int32_t intValue __attribute__((aligned (4))) = 0; int64_t longValue __attribute__((aligned (8))) = 0L; float floatValue __attribute__((aligned (4))) = 0.000000f; + std::array<int32_t, 3> intArray __attribute__((aligned (4))) = {{}}; + std::array<std::array<int64_t, 2>, 3> multiDimensionLongArray __attribute__((aligned (8))) = {{}}; double doubleValue __attribute__((aligned (8))) = 0.000000; ::aidl::android::aidl::tests::LongEnum enumValue __attribute__((aligned (8))) = ::aidl::android::aidl::tests::LongEnum::FOO; ::aidl::android::aidl::tests::FixedSize::FixedUnion parcelableValue; @@ -179,10 +189,10 @@ public: binder_status_t writeToParcel(AParcel* parcel) const; inline bool operator==(const FixedParcelable& _rhs) const { - return std::tie(booleanValue, byteValue, charValue, intValue, longValue, floatValue, doubleValue, enumValue, parcelableValue) == std::tie(_rhs.booleanValue, _rhs.byteValue, _rhs.charValue, _rhs.intValue, _rhs.longValue, _rhs.floatValue, _rhs.doubleValue, _rhs.enumValue, _rhs.parcelableValue); + return std::tie(booleanValue, byteValue, charValue, intValue, longValue, floatValue, intArray, multiDimensionLongArray, doubleValue, enumValue, parcelableValue) == std::tie(_rhs.booleanValue, _rhs.byteValue, _rhs.charValue, _rhs.intValue, _rhs.longValue, _rhs.floatValue, _rhs.intArray, _rhs.multiDimensionLongArray, _rhs.doubleValue, _rhs.enumValue, _rhs.parcelableValue); } inline bool operator<(const FixedParcelable& _rhs) const { - return std::tie(booleanValue, byteValue, charValue, intValue, longValue, floatValue, doubleValue, enumValue, parcelableValue) < std::tie(_rhs.booleanValue, _rhs.byteValue, _rhs.charValue, _rhs.intValue, _rhs.longValue, _rhs.floatValue, _rhs.doubleValue, _rhs.enumValue, _rhs.parcelableValue); + return std::tie(booleanValue, byteValue, charValue, intValue, longValue, floatValue, intArray, multiDimensionLongArray, doubleValue, enumValue, parcelableValue) < std::tie(_rhs.booleanValue, _rhs.byteValue, _rhs.charValue, _rhs.intValue, _rhs.longValue, _rhs.floatValue, _rhs.intArray, _rhs.multiDimensionLongArray, _rhs.doubleValue, _rhs.enumValue, _rhs.parcelableValue); } inline bool operator!=(const FixedParcelable& _rhs) const { return !(*this == _rhs); @@ -207,6 +217,8 @@ public: _aidl_os << ", intValue: " << ::android::internal::ToString(intValue); _aidl_os << ", longValue: " << ::android::internal::ToString(longValue); _aidl_os << ", floatValue: " << ::android::internal::ToString(floatValue); + _aidl_os << ", intArray: " << ::android::internal::ToString(intArray); + _aidl_os << ", multiDimensionLongArray: " << ::android::internal::ToString(multiDimensionLongArray); _aidl_os << ", doubleValue: " << ::android::internal::ToString(doubleValue); _aidl_os << ", enumValue: " << ::android::internal::ToString(enumValue); _aidl_os << ", parcelableValue: " << ::android::internal::ToString(parcelableValue); @@ -267,6 +279,10 @@ namespace tests { return "longValue"; case FixedSize::FixedUnion::Tag::floatValue: return "floatValue"; + case FixedSize::FixedUnion::Tag::intArray: + return "intArray"; + case FixedSize::FixedUnion::Tag::multiDimensionLongArray: + return "multiDimensionLongArray"; case FixedSize::FixedUnion::Tag::doubleValue: return "doubleValue"; case FixedSize::FixedUnion::Tag::enumValue: @@ -284,13 +300,15 @@ namespace internal { #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wc++17-extensions" template <> -constexpr inline std::array<aidl::android::aidl::tests::FixedSize::FixedUnion::Tag, 8> enum_values<aidl::android::aidl::tests::FixedSize::FixedUnion::Tag> = { +constexpr inline std::array<aidl::android::aidl::tests::FixedSize::FixedUnion::Tag, 10> enum_values<aidl::android::aidl::tests::FixedSize::FixedUnion::Tag> = { aidl::android::aidl::tests::FixedSize::FixedUnion::Tag::booleanValue, aidl::android::aidl::tests::FixedSize::FixedUnion::Tag::byteValue, aidl::android::aidl::tests::FixedSize::FixedUnion::Tag::charValue, aidl::android::aidl::tests::FixedSize::FixedUnion::Tag::intValue, aidl::android::aidl::tests::FixedSize::FixedUnion::Tag::longValue, aidl::android::aidl::tests::FixedSize::FixedUnion::Tag::floatValue, + aidl::android::aidl::tests::FixedSize::FixedUnion::Tag::intArray, + aidl::android::aidl::tests::FixedSize::FixedUnion::Tag::multiDimensionLongArray, aidl::android::aidl::tests::FixedSize::FixedUnion::Tag::doubleValue, aidl::android::aidl::tests::FixedSize::FixedUnion::Tag::enumValue, }; diff --git a/tests/golden_output/frozen/aidl-test-interface-rust-source/gen/android/aidl/tests/FixedSize.rs b/tests/golden_output/frozen/aidl-test-interface-rust-source/gen/android/aidl/tests/FixedSize.rs index 5fbba287..6036573c 100644 --- a/tests/golden_output/frozen/aidl-test-interface-rust-source/gen/android/aidl/tests/FixedSize.rs +++ b/tests/golden_output/frozen/aidl-test-interface-rust-source/gen/android/aidl/tests/FixedSize.rs @@ -39,6 +39,8 @@ pub mod r#FixedParcelable { pub r#intValue: i32, pub r#longValue: i64, pub r#floatValue: f32, + pub r#intArray: [i32; 3], + pub r#multiDimensionLongArray: [[i64; 2]; 3], pub r#doubleValue: f64, pub r#enumValue: crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum, pub r#parcelableValue: crate::mangled::_7_android_4_aidl_5_tests_9_FixedSize_10_FixedUnion, @@ -52,6 +54,8 @@ pub mod r#FixedParcelable { r#intValue: 0, r#longValue: 0, r#floatValue: 0.000000f32, + r#intArray: [Default::default(), Default::default(), Default::default()], + r#multiDimensionLongArray: [[Default::default(), Default::default()], [Default::default(), Default::default()], [Default::default(), Default::default()]], r#doubleValue: 0.000000f64, r#enumValue: crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum::FOO, r#parcelableValue: Default::default(), @@ -67,6 +71,8 @@ pub mod r#FixedParcelable { subparcel.write(&self.r#intValue)?; subparcel.write(&self.r#longValue)?; subparcel.write(&self.r#floatValue)?; + subparcel.write(&self.r#intArray)?; + subparcel.write(&self.r#multiDimensionLongArray)?; subparcel.write(&self.r#doubleValue)?; subparcel.write(&self.r#enumValue)?; subparcel.write(&self.r#parcelableValue)?; @@ -94,6 +100,12 @@ pub mod r#FixedParcelable { self.r#floatValue = subparcel.read()?; } if subparcel.has_more_data() { + self.r#intArray = subparcel.read()?; + } + if subparcel.has_more_data() { + self.r#multiDimensionLongArray = subparcel.read()?; + } + if subparcel.has_more_data() { self.r#doubleValue = subparcel.read()?; } if subparcel.has_more_data() { @@ -121,6 +133,8 @@ pub mod r#FixedUnion { IntValue(i32), LongValue(i64), FloatValue(f32), + IntArray([i32; 3]), + MultiDimensionLongArray([[i64; 2]; 3]), DoubleValue(f64), EnumValue(crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum), } @@ -156,14 +170,22 @@ pub mod r#FixedUnion { parcel.write(&5i32)?; parcel.write(v) } - Self::DoubleValue(v) => { + Self::IntArray(v) => { parcel.write(&6i32)?; parcel.write(v) } - Self::EnumValue(v) => { + Self::MultiDimensionLongArray(v) => { parcel.write(&7i32)?; parcel.write(v) } + Self::DoubleValue(v) => { + parcel.write(&8i32)?; + parcel.write(v) + } + Self::EnumValue(v) => { + parcel.write(&9i32)?; + parcel.write(v) + } } } fn read_from_parcel(&mut self, parcel: &binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> { @@ -200,11 +222,21 @@ pub mod r#FixedUnion { Ok(()) } 6 => { + let value: [i32; 3] = parcel.read()?; + *self = Self::IntArray(value); + Ok(()) + } + 7 => { + let value: [[i64; 2]; 3] = parcel.read()?; + *self = Self::MultiDimensionLongArray(value); + Ok(()) + } + 8 => { let value: f64 = parcel.read()?; *self = Self::DoubleValue(value); Ok(()) } - 7 => { + 9 => { let value: crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum = parcel.read()?; *self = Self::EnumValue(value); Ok(()) @@ -224,15 +256,17 @@ pub mod r#FixedUnion { #![allow(non_upper_case_globals)] use binder::declare_binder_enum; declare_binder_enum! { - r#Tag : [i8; 8] { + r#Tag : [i8; 10] { r#booleanValue = 0, r#byteValue = 1, r#charValue = 2, r#intValue = 3, r#longValue = 4, r#floatValue = 5, - r#doubleValue = 6, - r#enumValue = 7, + r#intArray = 6, + r#multiDimensionLongArray = 7, + r#doubleValue = 8, + r#enumValue = 9, } } } |