/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #import #import #import #import namespace facebook { namespace react { template using LazyVector = FB::LazyVector; }} template NSArray *RCTConvertVecToArray(const ContainerT &vec, id (^convertor)(typename ContainerT::value_type element)) { NSMutableArray *array = [NSMutableArray new]; for (size_t i = 0, size = vec.size(); i < size; ++i) { id object = convertor(vec[i]); array[i] = object ?: (id)kCFNull; } return array; } template NSArray *RCTConvertVecToArray(const ContainerT &vec) { return RCTConvertVecToArray(vec, ^id(typename ContainerT::value_type element) { return element; }); } template NSArray *RCTConvertOptionalVecToArray(const folly::Optional &vec, id (^convertor)(typename ContainerT::value_type element)) { return vec.hasValue() ? RCTConvertVecToArray(vec.value(), convertor) : nil; } template NSArray *RCTConvertOptionalVecToArray(const folly::Optional &vec) { return vec.hasValue() ? RCTConvertVecToArray(vec.value(), ^id(typename ContainerT::value_type element) { return element; }) : nil; } bool RCTBridgingToBool(id value); folly::Optional RCTBridgingToOptionalBool(id value); NSString *RCTBridgingToString(id value); NSString *RCTBridgingToOptionalString(id value); folly::Optional RCTBridgingToOptionalDouble(id value); double RCTBridgingToDouble(id value); NSArray *RCTBridgingToArray(id value); template facebook::react::LazyVector RCTBridgingToVec(id value, T (^ctor)(id element)) { NSArray *array = RCTBridgingToArray(value); typedef typename facebook::react::LazyVector::size_type _size_t; _size_t size = static_cast<_size_t>(array.count); return facebook::react::LazyVector::fromUnsafeRawValue(array, size, ctor); } template folly::Optional> RCTBridgingToOptionalVec(id value, T (^ctor)(id element)) { if (value == nil || value == (id)kCFNull) { return folly::none; } else { return RCTBridgingToVec(value, ctor); } }