Skip to content

Commit 4509dca

Browse files
authored
Merge pull request zerebubuth#385 from mmd-osm/patch/sv2
Reuse available string length
2 parents 20e9485 + 4e9592d commit 4509dca

File tree

5 files changed

+14
-20
lines changed

5 files changed

+14
-20
lines changed

include/cgimap/json_writer.hpp

+8-3
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ class json_writer : public output_writer {
3939
~json_writer() noexcept override;
4040

4141
void start_object();
42-
void object_key(const char* s);
4342
void object_key(std::string_view sv);
4443
void end_object();
4544

@@ -73,8 +72,14 @@ class json_writer : public output_writer {
7372
yajl_gen_number(gen, str, len);
7473
}
7574

76-
void entry(const char* s);
77-
void entry(std::string_view sv);
75+
template <typename T,
76+
std::enable_if_t<std::is_convertible_v<T&&, std::string_view>,
77+
bool> = true>
78+
void entry(T&& s)
79+
{
80+
auto sv = std::string_view(s);
81+
yajl_gen_string(gen, (const unsigned char *)sv.data(), sv.size());
82+
}
7883

7984
template <typename TKey, typename TValue>
8085
void property(TKey&& key, TValue&& val) {

include/cgimap/output_formatter.hpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ enum class action_type {
4040

4141
namespace {
4242

43-
const char* element_type_name(element_type elt) {
43+
template <typename T = const char *>
44+
T element_type_name(element_type elt) noexcept {
4445

4546
switch (elt) {
4647
case element_type::node:

src/backend/apidb/common_pgsql_selection.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ struct comments_columns
131131

132132
elem.id = row[col.id_col].as<osm_nwr_id_t>();
133133
elem.version = row[col.version_col].as<int>();
134-
elem.timestamp = row[col.timestamp_col].c_str();
134+
elem.timestamp = row[col.timestamp_col].as<std::string>();
135135
elem.changeset = row[col.changeset_id_col].as<osm_changeset_id_t>();
136136
elem.visible = row[col.visible_col].as<bool>();
137137

@@ -163,8 +163,8 @@ std::optional<T> extract_optional(const pqxx_field &f) {
163163
changeset_info elem;
164164

165165
elem.id = row[col.id_col].as<osm_changeset_id_t>();
166-
elem.created_at = row[col.created_at_col].c_str();
167-
elem.closed_at = row[col.closed_at_col].c_str();
166+
elem.created_at = row[col.created_at_col].as<std::string>();
167+
elem.closed_at = row[col.closed_at_col].as<std::string>();
168168

169169
const auto & cs = changeset_cache[elem.id];
170170

src/json_formatter.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ void json_formatter::write_relation(const element_info &elem,
157157
writer->start_array();
158158
for (const auto & member : members) {
159159
writer->start_object();
160-
writer->property("type", element_type_name(member.type));
160+
writer->property("type", element_type_name<std::string_view>(member.type));
161161
writer->property("ref", member.ref);
162162
writer->property("role", member.role);
163163
writer->end_object();

src/json_writer.cpp

-12
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,6 @@ void json_writer::start_object() {
6363
yajl_gen_map_open(gen);
6464
}
6565

66-
void json_writer::object_key(const char* s) {
67-
entry(s);
68-
}
69-
7066
void json_writer::object_key(std::string_view sv) {
7167
entry(sv);
7268
}
@@ -102,14 +98,6 @@ void json_writer::entry(double d) {
10298
yajl_gen_number(gen, str, len);
10399
}
104100

105-
void json_writer::entry(const char* s) {
106-
entry(std::string_view(s));
107-
}
108-
109-
void json_writer::entry(std::string_view sv) {
110-
yajl_gen_string(gen, (const unsigned char *)sv.data(), sv.size());
111-
}
112-
113101
void json_writer::start_array() {
114102
yajl_gen_array_open(gen);
115103
}

0 commit comments

Comments
 (0)