// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#import "ios/web/navigation/navigation_item_impl_list.h"

#import "ios/web/navigation/navigation_item_impl.h"

#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif

namespace web {

ScopedNavigationItemImplList CreateScopedNavigationItemImplList(
    ScopedNavigationItemList scoped_item_list) {
  ScopedNavigationItemImplList list(scoped_item_list.size());
  for (size_t index = 0; index < scoped_item_list.size(); ++index) {
    std::unique_ptr<NavigationItemImpl> scoped_item_impl(
        static_cast<NavigationItemImpl*>(scoped_item_list[index].release()));
    list[index] = std::move(scoped_item_impl);
  }
  return list;
}

NavigationItemList CreateNavigationItemList(
    const ScopedNavigationItemImplList& scoped_item_list) {
  NavigationItemList list(scoped_item_list.size());
  for (size_t index = 0; index < scoped_item_list.size(); ++index) {
    list[index] = scoped_item_list[index].get();
  }
  return list;
}

}  // namespace web
