Skip to content

Commit f5d62f4

Browse files
committed
Improved code [skip ci]
1 parent 8b39070 commit f5d62f4

File tree

1 file changed

+18
-15
lines changed

1 file changed

+18
-15
lines changed

include/pgvector/pqxx.hpp

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,15 @@ template <> struct string_traits<pgvector::Vector> {
3333

3434
std::vector<float> result;
3535
if (text.size() > 2) {
36-
size_t start = 1;
37-
for (size_t i = start; i < text.size() - 2; i++) {
38-
if (text[i] == ',') {
39-
result.push_back(string_traits<float>::from_string(text.substr(start, i - start), c));
36+
std::string_view inner = text.substr(1, text.size() - 2);
37+
size_t start = 0;
38+
for (size_t i = 0; i < inner.size(); i++) {
39+
if (inner[i] == ',') {
40+
result.push_back(string_traits<float>::from_string(inner.substr(start, i - start), c));
4041
start = i + 1;
4142
}
4243
}
43-
result.push_back(string_traits<float>::from_string(text.substr(start, text.size() - start - 1), c));
44+
result.push_back(string_traits<float>::from_string(inner.substr(start), c));
4445
}
4546
return pgvector::Vector(std::move(result));
4647
}
@@ -71,14 +72,15 @@ template <> struct string_traits<pgvector::HalfVector> {
7172

7273
std::vector<float> result;
7374
if (text.size() > 2) {
74-
size_t start = 1;
75-
for (size_t i = start; i < text.size() - 2; i++) {
76-
if (text[i] == ',') {
77-
result.push_back(string_traits<float>::from_string(text.substr(start, i - start), c));
75+
std::string_view inner = text.substr(1, text.size() - 2);
76+
size_t start = 0;
77+
for (size_t i = 0; i < inner.size(); i++) {
78+
if (inner[i] == ',') {
79+
result.push_back(string_traits<float>::from_string(inner.substr(start, i - start), c));
7880
start = i + 1;
7981
}
8082
}
81-
result.push_back(string_traits<float>::from_string(text.substr(start, text.size() - start - 1), c));
83+
result.push_back(string_traits<float>::from_string(inner.substr(start), c));
8284
}
8385
return pgvector::HalfVector(std::move(result));
8486
}
@@ -138,14 +140,15 @@ template <> struct string_traits<pgvector::SparseVector> {
138140
values.push_back(value);
139141
};
140142

141-
size_t start = 1;
142-
for (size_t i = start; i < n - 1; i++) {
143-
if (text[i] == ',') {
144-
cb(text.substr(start, i - start));
143+
std::string_view inner = text.substr(1, n - 1);
144+
size_t start = 0;
145+
for (size_t i = 0; i < inner.size(); i++) {
146+
if (inner[i] == ',') {
147+
cb(inner.substr(start, i - start));
145148
start = i + 1;
146149
}
147150
}
148-
cb(text.substr(start, n - start));
151+
cb(inner.substr(start));
149152
}
150153

151154
return pgvector::SparseVector(dimensions, indices, values);

0 commit comments

Comments
 (0)