1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4  * License, v. 2.0. If a copy of the MPL was not distributed with this
5  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 
7 #ifndef mozilla_jni_GeckoBundleUtils_h
8 #define mozilla_jni_GeckoBundleUtils_h
9 
10 #include "mozilla/java/GeckoBundleWrappers.h"
11 
12 namespace mozilla {
13 namespace jni {
14 
15 #define GECKOBUNDLE_START(name)                   \
16   nsTArray<jni::String::LocalRef> _##name##_keys; \
17   nsTArray<jni::Object::LocalRef> _##name##_values;
18 
19 #define GECKOBUNDLE_PUT(name, key, value)                     \
20   _##name##_keys.AppendElement(                               \
21       jni::StringParam(NS_LITERAL_STRING_FROM_CSTRING(key))); \
22   _##name##_values.AppendElement(value);
23 
24 #define GECKOBUNDLE_FINISH(name)                                            \
25   MOZ_ASSERT(_##name##_keys.Length() == _##name##_values.Length());         \
26   auto _##name##_jkeys =                                                    \
27       jni::ObjectArray::New<jni::String>(_##name##_keys.Length());          \
28   auto _##name##_jvalues =                                                  \
29       jni::ObjectArray::New<jni::Object>(_##name##_values.Length());        \
30   for (size_t i = 0;                                                        \
31        i < _##name##_keys.Length() && i < _##name##_values.Length(); i++) { \
32     _##name##_jkeys->SetElement(i, _##name##_keys.ElementAt(i));            \
33     _##name##_jvalues->SetElement(i, _##name##_values.ElementAt(i));        \
34   }                                                                         \
35   auto name =                                                               \
36       mozilla::java::GeckoBundle::New(_##name##_jkeys, _##name##_jvalues);
37 
38 }  // namespace jni
39 }  // namespace mozilla
40 
41 #endif  // mozilla_jni_GeckoBundleUtils_h
42