Skip to content

Commit

Permalink
generalized csv
Browse files Browse the repository at this point in the history
  • Loading branch information
danielaparker committed Jan 2, 2025
1 parent 6f8ae22 commit ec8e9d6
Showing 1 changed file with 20 additions and 24 deletions.
44 changes: 20 additions & 24 deletions include/jsoncons_ext/csv/csv_encoder.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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 <array> // std::array
#include <limits> // std::numeric_limits
#include <memory> // std::allocator
#include <ostream>
#include <string>
#include <unordered_map> // std::unordered_map
#include <utility> // std::move
#include <vector>

#include <jsoncons/detail/write_number.hpp>
#include <ostream>
#include <utility> // std::move
#include <unordered_map> // std::unordered_map
#include <memory> // std::allocator
#include <limits> // std::numeric_limits
#include <jsoncons/json_exception.hpp>
#include <jsoncons/json_visitor.hpp>
#include <jsoncons/sink.hpp>
#include <jsoncons/detail/write_number.hpp>
#include <jsoncons_ext/csv/csv_options.hpp>
#include <jsoncons/sink.hpp>

namespace jsoncons { namespace csv {

Expand Down Expand Up @@ -71,13 +70,12 @@ class basic_csv_encoder final : public basic_json_visitor<CharT>
{
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
{
Expand All @@ -97,16 +95,16 @@ class basic_csv_encoder final : public basic_json_visitor<CharT>
std::vector<stack_item> stack_;
jsoncons::detail::write_double fp_;

std::unordered_map<string_type,string_type, std::hash<string_type>,std::equal_to<string_type>,string_string_allocator_type> buffered_line_;
string_type name_;
std::vector<string_type,string_allocator_type> column_names_;
std::unordered_map<string_type,string_type, std::hash<string_type>,std::equal_to<string_type>,string_string_allocator_type> cname_value_map_;

std::size_t column_index_;
std::vector<std::size_t> 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>(sink), basic_csv_encode_options<CharT>(), alloc)
Expand All @@ -120,7 +118,8 @@ class basic_csv_encoder final : public basic_json_visitor<CharT>
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_);
}
Expand All @@ -135,8 +134,6 @@ class basic_csv_encoder final : public basic_json_visitor<CharT>
{
}
}
basic_csv_encoder& operator=(const basic_csv_encoder&) = delete;
basic_csv_encoder& operator=(basic_csv_encoder&&) = delete;

void reset()
{
Expand Down Expand Up @@ -981,7 +978,6 @@ using csv_string_encoder = basic_csv_encoder<char,jsoncons::string_sink<std::str
using csv_wstream_encoder = basic_csv_encoder<wchar_t>;
using wcsv_string_encoder = basic_csv_encoder<wchar_t,jsoncons::string_sink<std::wstring>>;

} // namespace jsonpath
} // namespace jsoncons
}}

#endif // JSONCONS_EXT_CSV_CSV_ENCODER_HPP
#endif

0 comments on commit ec8e9d6

Please sign in to comment.