105template<
typename ChunkT>
114 return Any<>(process_records(records));
116 if (!
result.has_value()) {
122 result_chunks.
append(std::move(value.get<ChunkT>()));
124 return result_chunks;
134 const CsvParseOptions &
options,
145 return fields_.size();
156 if (index >= fields_.size()) {
159 return fields_[index];
175 : offsets_(offsets), fields_(fields)
181 return offsets_.size();
191 return CsvRecord(fields_.slice(offsets_[index]));
238 const char delimiter,
constexpr IndexRange index_range() const
constexpr const T * data() const
constexpr int64_t size() const
void append(const T &value)
void reserve(const int64_t min_capacity)
CsvRecord(Span< Span< char > > fields)
StringRef field_str(const int64_t index) const
Span< char > field(const int64_t index) const
IndexRange index_range() const
CsvRecords(OffsetIndices< int64_t > offsets, Span< Span< char > > fields)
CsvRecord record(const int64_t index) const
IndexRange index_range() const
CCL_NAMESPACE_BEGIN struct Options options
int64_t find_end_of_simple_field(Span< char > buffer, int64_t start, char delimiter)
std::optional< int64_t > parse_record_fields(const Span< char > buffer, const int64_t start, const char delimiter, const char quote, const Span< char > quote_escape_chars, Vector< Span< char > > &r_fields)
std::optional< int64_t > find_end_of_quoted_field(Span< char > buffer, int64_t start, char quote, Span< char > escape_chars)
std::optional< Vector< Any<> > > parse_csv_in_chunks(const Span< char > buffer, const CsvParseOptions &options, FunctionRef< void(const CsvRecord &record)> process_header, FunctionRef< Any<>(const CsvRecords &records)> process_records)
StringRef unescape_field(const StringRef str, const CsvParseOptions &options, LinearAllocator<> &allocator)
Span< char > quote_escape_chars