react-native bridging > Add support for std::set
Summary: There are use cases in which we want to pass a set of unique elements from C++ to JS and back. We can do this simple by re-using a plain JS array for these purposes. Changelog: [Internal][Added] react-native bridging > Add support for std::set Reviewed By: cipolleschi Differential Revision: D40668244 fbshipit-source-id: d06603440569e5f760c2859a54cf6e4232c7d97a
This commit is contained in:
Родитель
3b0c65583d
Коммит
1d6b732496
|
@ -13,6 +13,7 @@
|
|||
#include <deque>
|
||||
#include <initializer_list>
|
||||
#include <list>
|
||||
#include <set>
|
||||
#include <tuple>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
@ -105,4 +106,22 @@ struct Bridging<std::vector<T>>
|
|||
}
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
struct Bridging<std::set<T>> : array_detail::BridgingDynamic<std::set<T>> {
|
||||
static std::set<T> fromJs(
|
||||
facebook::jsi::Runtime &rt,
|
||||
const jsi::Array &array,
|
||||
const std::shared_ptr<CallInvoker> &jsInvoker) {
|
||||
size_t length = array.length(rt);
|
||||
|
||||
std::set<T> set;
|
||||
for (size_t i = 0; i < length; i++) {
|
||||
set.insert(
|
||||
bridging::fromJs<T>(rt, array.getValueAtIndex(rt, i), jsInvoker));
|
||||
}
|
||||
|
||||
return set;
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace facebook::react
|
||||
|
|
|
@ -431,6 +431,8 @@ TEST_F(BridgingTest, supportTest) {
|
|||
EXPECT_TRUE((bridging::supportsFromJs<std::string>));
|
||||
EXPECT_TRUE((bridging::supportsFromJs<std::string, jsi::String>));
|
||||
EXPECT_TRUE((bridging::supportsFromJs<std::string, jsi::String &>));
|
||||
EXPECT_TRUE((bridging::supportsFromJs<std::set<int>, jsi::Array>));
|
||||
EXPECT_TRUE((bridging::supportsFromJs<std::set<int>, jsi::Array &>));
|
||||
EXPECT_TRUE((bridging::supportsFromJs<std::vector<int>, jsi::Array>));
|
||||
EXPECT_TRUE((bridging::supportsFromJs<std::vector<int>, jsi::Array &>));
|
||||
EXPECT_TRUE(
|
||||
|
@ -453,6 +455,8 @@ TEST_F(BridgingTest, supportTest) {
|
|||
EXPECT_FALSE((bridging::supportsFromJs<double, jsi::Object &>));
|
||||
EXPECT_FALSE((bridging::supportsFromJs<std::string, jsi::Object>));
|
||||
EXPECT_FALSE((bridging::supportsFromJs<std::string, jsi::Object &>));
|
||||
EXPECT_FALSE((bridging::supportsFromJs<std::set<int>, jsi::String>));
|
||||
EXPECT_FALSE((bridging::supportsFromJs<std::set<int>, jsi::String &>));
|
||||
EXPECT_FALSE((bridging::supportsFromJs<std::vector<int>, jsi::String>));
|
||||
EXPECT_FALSE((bridging::supportsFromJs<std::vector<int>, jsi::String &>));
|
||||
|
||||
|
@ -494,6 +498,8 @@ TEST_F(BridgingTest, supportTest) {
|
|||
EXPECT_TRUE((bridging::supportsToJs<double>));
|
||||
EXPECT_TRUE((bridging::supportsToJs<std::string>));
|
||||
EXPECT_TRUE((bridging::supportsToJs<std::string, jsi::String>));
|
||||
EXPECT_TRUE((bridging::supportsToJs<std::set<int>>));
|
||||
EXPECT_TRUE((bridging::supportsToJs<std::set<int>, jsi::Array>));
|
||||
EXPECT_TRUE((bridging::supportsToJs<std::vector<int>>));
|
||||
EXPECT_TRUE((bridging::supportsToJs<std::vector<int>, jsi::Array>));
|
||||
EXPECT_TRUE((bridging::supportsToJs<std::map<std::string, int>>));
|
||||
|
|
Загрузка…
Ссылка в новой задаче