Skip to content

Commit 555c9ec

Browse files
committed
fix(cpp): fix CsvReader::parse_value scope and Frame constructor calls
1 parent 82c467b commit 555c9ec

2 files changed

Lines changed: 7 additions & 28 deletions

File tree

cpp/src/csv_reader.cpp

Lines changed: 3 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -663,28 +663,7 @@ void CsvParser::parse_line(const std::string& line, std::vector<std::string>& fi
663663
}
664664
}
665665

666-
DType CsvReader::infer_type(const std::string& value) const {
667-
if (value.empty()) return DType::NULL_TYPE;
668666

669-
// Check configurable null sentinel values (pandas-compatible defaults)
670-
if (config_.null_values.count(value)) return DType::NULL_TYPE;
671-
672-
// Try bool
673-
std::string lower = value;
674-
std::transform(lower.begin(), lower.end(), lower.begin(), ::tolower);
675-
if (lower == "true" || lower == "false") return DType::BOOL;
676-
677-
// Try int64
678-
{
679-
const char* start = value.c_str();
680-
char* end = nullptr;
681-
long long val = std::strtoll(start, &end, 10);
682-
(void)val;
683-
if (end != start && *end == '\0') return DType::INT64;
684-
}
685-
686-
return value.empty();
687-
}
688667

689668
DType CsvParser::infer_type(const std::string& value) const {
690669
const std::string sanitized = handle_utf8_errors(value, config_.encoding_errors);
@@ -761,8 +740,9 @@ DType CsvParser::promote_type(DType current, DType incoming) {
761740
return DType::STRING;
762741
}
763742

764-
CellValue CsvReader::parse_value(const std::string& raw, DType dtype) {
765-
if (raw.empty() || config_.null_values.count(raw)) return std::monostate{};
743+
CellValue CsvParser::parse_value(const std::string& raw, DType dtype, bool is_forced) const {
744+
const std::string sanitized = handle_utf8_errors(raw, config_.encoding_errors);
745+
if (is_null_sentinel(sanitized)) return std::monostate{};
766746

767747
switch (dtype) {
768748
case DType::BOOL: {

cpp/src/frame.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ Frame Frame::clone() const {
100100
for (const auto& col : columns_) {
101101
cloned.push_back(col.clone());
102102
}
103-
return Frame(row_count_, std::move(cloned));
103+
return Frame(std::move(cloned), row_count_);
104104
}
105105

106106
void Frame::validate_column_size(const Column& col) const {
@@ -119,7 +119,7 @@ Frame Frame::select_columns(const std::vector<std::string>& columns) const {
119119
selected.push_back(column(name).clone());
120120
}
121121

122-
return Frame(row_count_, std::move(selected));
122+
return Frame(std::move(selected), row_count_);
123123
}
124124

125125
Frame Frame::select_rows(size_t start, size_t count) const {
@@ -159,7 +159,7 @@ Frame Frame::select_rows(size_t start, size_t count) const {
159159
selected_columns.push_back(std::move(new_col));
160160
}
161161

162-
return Frame(actual_count, std::move(selected_columns));
162+
return Frame(std::move(selected_columns), actual_count);
163163
}
164164

165165
void Frame::rebuild_index() {
@@ -169,7 +169,6 @@ void Frame::rebuild_index() {
169169
}
170170
}
171171

172-
main
173172

174173
std::vector<std::pair<std::string, std::vector<std::pair<std::string, double>>>> Frame::describe()
175174
const {
@@ -327,5 +326,5 @@ std::vector<std::pair<std::string, std::vector<std::pair<std::string, double>>>>
327326
return summary;
328327
}
329328

330-
main
329+
331330
} // namespace arnio

0 commit comments

Comments
 (0)