diff --git a/include/jsoncons_ext/csv/csv_encoder.hpp b/include/jsoncons_ext/csv/csv_encoder.hpp index b99471f1d..638ada071 100644 --- a/include/jsoncons_ext/csv/csv_encoder.hpp +++ b/include/jsoncons_ext/csv/csv_encoder.hpp @@ -4,23 +4,22 @@ // See https://github.com/danielaparker/jsoncons for latest version -#ifndef JSONCONS_EXT_CSV_CSV_ENCODER_HPP -#define JSONCONS_EXT_CSV_CSV_ENCODER_HPP +#ifndef JSONCONS_CSV_CSV_ENCODER_HPP +#define JSONCONS_CSV_CSV_ENCODER_HPP #include // std::array -#include // std::numeric_limits -#include // std::allocator -#include #include -#include // std::unordered_map -#include // std::move #include - -#include +#include +#include // std::move +#include // std::unordered_map +#include // std::allocator +#include // std::numeric_limits #include #include -#include +#include #include +#include namespace jsoncons { namespace csv { @@ -71,13 +70,12 @@ class basic_csv_encoder final : public basic_json_visitor { stack_item_kind item_kind_; std::size_t count_; + std::string pathname_; stack_item(stack_item_kind item_kind) noexcept - : item_kind_(item_kind), count_(0) + : item_kind_(item_kind), pathname_{}, count_(0) { } - - ~stack_item() = default; bool is_object() const { @@ -97,16 +95,16 @@ class basic_csv_encoder final : public basic_json_visitor std::vector stack_; jsoncons::detail::write_double fp_; - std::unordered_map,std::equal_to,string_string_allocator_type> buffered_line_; - string_type name_; + std::vector column_names_; + std::unordered_map,std::equal_to,string_string_allocator_type> cname_value_map_; + std::size_t column_index_; std::vector row_counts_; -public: // Noncopyable and nonmoveable basic_csv_encoder(const basic_csv_encoder&) = delete; - basic_csv_encoder(basic_csv_encoder&&) = delete; - + basic_csv_encoder& operator=(const basic_csv_encoder&) = delete; +public: basic_csv_encoder(Sink&& sink, const Allocator& alloc = Allocator()) : basic_csv_encoder(std::forward(sink), basic_csv_encode_options(), alloc) @@ -120,7 +118,8 @@ class basic_csv_encoder final : public basic_json_visitor options_(options), alloc_(alloc), stack_(), - fp_(options.float_format(), options.precision()) + fp_(options.float_format(), options.precision()), + column_index_(0) { jsoncons::csv::detail::parse_column_names(options.column_names(), column_names_); } @@ -135,8 +134,6 @@ class basic_csv_encoder final : public basic_json_visitor { } } - basic_csv_encoder& operator=(const basic_csv_encoder&) = delete; - basic_csv_encoder& operator=(basic_csv_encoder&&) = delete; void reset() { @@ -981,7 +978,6 @@ using csv_string_encoder = basic_csv_encoder; using wcsv_string_encoder = basic_csv_encoder>; -} // namespace jsonpath -} // namespace jsoncons +}} -#endif // JSONCONS_EXT_CSV_CSV_ENCODER_HPP +#endif