//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#include <sycl/__impl/context.hpp>
#include <sycl/__impl/device.hpp>
#include <sycl/__impl/exception.hpp>

#include <detail/context_impl.hpp>
#include <detail/platform_impl.hpp>

#include <algorithm>
#include <cassert>
#include <vector>

_LIBSYCL_BEGIN_NAMESPACE_SYCL

context::context(const std::vector<device> &deviceList,
                 async_handler asyncHandler, const property_list &propList) {
  auto deviceImpls = detail::getSyclObjImpls(deviceList);

  impl = detail::ContextImpl::create(std::move(deviceImpls), asyncHandler,
                                     propList);
}

backend context::get_backend() const noexcept { return impl->getBackend(); }

platform context::get_platform() const {
  return detail::createSyclObjFromImpl<platform>(impl->getPlatformImpl());
}

std::vector<device> context::get_devices() const {
  std::vector<device> Devices;

  impl->iterateDevices([&Devices](detail::DeviceImpl *DevImpl) {
    assert(DevImpl && "Device impl can't be nullptr");
    Devices.push_back(detail::createSyclObjFromImpl<device>(*DevImpl));
  });

  return Devices;
}

_LIBSYCL_END_NAMESPACE_SYCL
