21 #include <cudf/utilities/export.hpp>
29 namespace CUDF_EXPORT
cudf {
45 template <
typename Container>
65 [[nodiscard]] virtual size_t size()
const = 0;
79 [[nodiscard]] virtual uint8_t
const*
data()
const = 0;
101 template <
typename Container>
102 static std::unique_ptr<buffer>
create(Container&& data_owner)
104 return std::make_unique<owning_buffer<Container>>(std::forward<Container>(data_owner));
113 static std::unique_ptr<datasource>
create(std::string
const& filepath,
121 size_t max_size_estimate = 0);
159 template <
typename T>
170 static std::vector<std::unique_ptr<datasource>>
create(std::vector<T>
const& args)
172 std::vector<std::unique_ptr<datasource>> sources;
173 sources.reserve(args.size());
174 std::transform(args.cbegin(), args.cend(), std::back_inserter(sources), [](
auto const& arg) {
175 return datasource::create(arg);
254 virtual std::unique_ptr<datasource::buffer>
host_read(
size_t offset,
size_t size) = 0;
278 virtual std::future<std::unique_ptr<datasource::buffer>>
host_read_async(
size_t offset,
316 virtual size_t host_read(
size_t offset,
size_t size, uint8_t* dst) = 0;
329 virtual std::future<size_t>
host_read_async(
size_t offset,
size_t size, uint8_t* dst);
366 return supports_device_read();
371 virtual std::unique_ptr<datasource::buffer>
device_read(
size_t offset,
375 CUDF_FAIL(
"datasource classes that support device_read must override it.");
384 CUDF_FAIL(
"datasource classes that support device_read must override it.");
413 CUDF_FAIL(
"datasource classes that support device_read_async must override it.");
418 [[nodiscard]] virtual size_t size()
const = 0;
422 [[nodiscard]] virtual bool is_empty()
const {
return size() == 0; }
439 non_owning_buffer(uint8_t
const* data,
size_t size) : _data(data), _size(size) {}
453 [[nodiscard]] size_t size()
const override {
return _size; }
468 [[nodiscard]] uint8_t
const*
data()
const override {
return _data; }
471 uint8_t
const* _data{
nullptr};
478 template <
typename Container>
482 static_assert(std::is_rvalue_reference_v<Container&&>,
483 "传递给构造函数的容器参数必须是右值。");
497 : _data(std::move(moved_data_owner)), _data_ptr(_data.data()), _size(_data.size())
505 owning_buffer(Container&& moved_data_owner, uint8_t
const* data_ptr,
size_t size)
506 : _data(std::move(moved_data_owner)), _data_ptr(data_ptr), _size(size)
518 [[nodiscard]] size_t size()
const override {
return _size; }
518 [[nodiscard]] size_t size()
const override {
return _size; }
522 [[nodiscard]] uint8_t
const*
data()
const override 524 return static_cast<uint8_t const*
>(_data_ptr);
497 : _data(std::move(moved_data_owner)), _data_ptr(_data.data()), _size(_data.size())
529 void const* _data_ptr;
cudf::io::datasource::buffer
datasource 返回给调用者的缓冲区的接口类。
virtual ~buffer()=default
基类析构函数。
cudf::io::datasource::buffer::create
static std::unique_ptr< buffer > create(Container &&data_owner)
从容器构造 datasource 缓冲区对象的工厂函数。
cudf::io::datasource::buffer::size
virtual size_t size() const =0
cudf::io::datasource::buffer::data
virtual uint8_t const * data() const =0
返回缓冲区中数据的地址。
非拥有缓冲区的实现,datasource 在销毁前持有该缓冲区。
cudf::io::datasource::non_owning_buffer::size
size_t size() const override
返回缓冲区的大小。
cudf::io::datasource::non_owning_buffer::data
uint8_t const * data() const override
返回缓冲区的指针。
cudf::io::datasource::non_owning_buffer::non_owning_buffer
non_owning_buffer(uint8_t const *data, size_t size)
构造一个新的非拥有缓冲区对象。
cudf::io::datasource::owning_buffer
cudf::io::datasource::owning_buffer::owning_buffer
owning_buffer(Container &&moved_data_owner)
将输入容器移动到新创建的对象中。
owning_buffer(Container &&moved_data_owner, uint8_t const *data_ptr, size_t size)
将输入容器移动到新创建的对象中,并暴露缓冲区的子跨度。
478 template <
typename Container>
cudf::io::datasource::owning_buffer::size
cudf::io::datasource::owning_buffer::data
返回缓冲区中数据的指针。
将输入容器移动到新创建的对象中。
cudf::io::datasource::supports_device_read
virtual bool supports_device_read() const
static std::unique_ptr< datasource > create(datasource *source)
从用户实现的 datasource 对象创建 source。
virtual std::future< std::unique_ptr< datasource::buffer > > host_read_async(size_t offset, size_t size)
cudf::io::datasource::device_read
virtual size_t device_read(size_t offset, size_t size, uint8_t *dst, rmm::cuda_stream_view stream)
cudf::io::datasource::is_device_read_preferred