Skip to content

Commit 75bc014

Browse files
committed
Use std::less<void> in the ParseKeyEqualsValue return type
This allows callers to use `.find` and `.count` functions with a `std::string_view`, saving an allocation of a `std::string`. Bug: b/472379698
1 parent 24a437b commit 75bc014

File tree

12 files changed

+45
-34
lines changed

12 files changed

+45
-34
lines changed

base/cvd/cuttlefish/common/libs/key_equals_value/key_equals_value.cc

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include <map>
2020
#include <sstream>
2121
#include <string>
22+
#include <string_view>
2223
#include <utility>
2324

2425
#include "absl/strings/ascii.h"
@@ -59,9 +60,9 @@ Result<void> GenericWriteKeyEqualsValue(
5960

6061
} // namespace
6162

62-
Result<std::map<std::string, std::string>> ParseKeyEqualsValue(
63+
Result<std::map<std::string, std::string, std::less<void>>> ParseKeyEqualsValue(
6364
const std::string& contents) {
64-
std::map<std::string, std::string> key_equals_value;
65+
std::map<std::string, std::string, std::less<void>> key_equals_value;
6566
for (std::string_view line : absl::StrSplit(contents, '\n')) {
6667
std::pair<std::string_view, std::string_view> key_value =
6768
absl::StrSplit(line, absl::MaxSplits('=', 1));

base/cvd/cuttlefish/common/libs/key_equals_value/key_equals_value.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
namespace cuttlefish {
2525

26-
Result<std::map<std::string, std::string>> ParseKeyEqualsValue(
26+
Result<std::map<std::string, std::string, std::less<void>>> ParseKeyEqualsValue(
2727
const std::string&);
2828

2929
std::string SerializeKeyEqualsValue(const std::map<std::string, std::string>&);

base/cvd/cuttlefish/common/libs/key_equals_value/key_equals_value_test.cc

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
#include "gmock/gmock-matchers.h"
2121
#include "gtest/gtest.h"
2222

23-
#include "cuttlefish/result/result.h"
2423
#include "cuttlefish/result/result_matchers.h"
2524

2625
namespace cuttlefish {
@@ -29,21 +28,21 @@ namespace {
2928
TEST(KeyEqualsValue, Deserialize) {
3029
std::string serialized = "key1 = value1 \n key2 = value2";
3130

32-
std::map<std::string, std::string> expected = {{"key1", "value1"},
33-
{"key2", "value2"}};
31+
std::map<std::string, std::string, std::less<void>> expected = {
32+
{"key1", "value1"}, {"key2", "value2"}};
3433
ASSERT_THAT(ParseKeyEqualsValue(serialized), IsOkAndValue(expected));
3534
}
3635

3736
TEST(KeyEqualsValue, Serialize) {
38-
std::map<std::string, std::string> misc_info = {{"key1", "value1"},
39-
{"key2", "value2"}};
37+
std::map<std::string, std::string, std::less<void>> misc_info = {
38+
{"key1", "value1"}, {"key2", "value2"}};
4039

4140
EXPECT_EQ(SerializeKeyEqualsValue(misc_info), "key1=value1\nkey2=value2\n");
4241
}
4342

4443
TEST(KeyEqualsValue, SerializeDeserialize) {
45-
std::map<std::string, std::string> misc_info = {{"key1", "value1"},
46-
{"key2", "value2"}};
44+
std::map<std::string, std::string, std::less<void>> misc_info = {
45+
{"key1", "value1"}, {"key2", "value2"}};
4746

4847
std::string serialized = SerializeKeyEqualsValue(misc_info);
4948

@@ -53,7 +52,8 @@ TEST(KeyEqualsValue, SerializeDeserialize) {
5352
TEST(KeyEqualsValue, DeserializeDuplicateKeySameValue) {
5453
std::string serialized = "key1=value1\nkey1=value1";
5554

56-
std::map<std::string, std::string> expected = {{"key1", "value1"}};
55+
std::map<std::string, std::string, std::less<void>> expected = {
56+
{"key1", "value1"}};
5757
ASSERT_THAT(ParseKeyEqualsValue(serialized), IsOkAndValue(expected));
5858
}
5959

@@ -66,8 +66,9 @@ TEST(KeyEqualsValue, DeserializeDuplicateKeyDifferentValue) {
6666
TEST(KeyEqualsValue, EmptyLines) {
6767
std::string serialized = "\n\n\n\n\n\n";
6868

69-
ASSERT_THAT(ParseKeyEqualsValue(serialized),
70-
IsOkAndValue(std::map<std::string, std::string>()));
69+
ASSERT_THAT(
70+
ParseKeyEqualsValue(serialized),
71+
IsOkAndValue(std::map<std::string, std::string, std::less<void>>()));
7172
}
7273

7374
} // namespace

base/cvd/cuttlefish/host/commands/assemble_cvd/android_build/img_zip.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ class ImgZipImpl : public AndroidBuild {
7676
}
7777

7878
// TODO: schuffelen - put in AndroidBuild
79-
Result<std::map<std::string, std::string>> AndroidInfoTxt() {
79+
Result<std::map<std::string, std::string, std::less<void>>> AndroidInfoTxt() {
8080
std::string contents =
8181
CF_EXPECT(archive_.MemberContents("android-info.txt"));
8282
return CF_EXPECT(ParseKeyEqualsValue(contents));

base/cvd/cuttlefish/host/commands/assemble_cvd/android_build/misc_info_metadata.cc

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ namespace {
3737

3838
class MetadataFromMiscInfo : public AndroidBuild {
3939
public:
40-
MetadataFromMiscInfo(std::map<std::string, std::string> misc_info)
40+
MetadataFromMiscInfo(
41+
std::map<std::string, std::string, std::less<void>> misc_info)
4142
: misc_info_(std::move(misc_info)) {}
4243

4344
Result<std::set<std::string, std::less<void>>> SystemPartitions() override {
@@ -90,13 +91,13 @@ class MetadataFromMiscInfo : public AndroidBuild {
9091
return out << "}";
9192
}
9293

93-
std::map<std::string, std::string> misc_info_;
94+
std::map<std::string, std::string, std::less<void>> misc_info_;
9495
};
9596

9697
} // namespace
9798

9899
Result<std::unique_ptr<AndroidBuild>> AndroidBuildFromMiscInfo(
99-
std::map<std::string, std::string> misc_info) {
100+
std::map<std::string, std::string, std::less<void>> misc_info) {
100101
auto build = std::make_unique<MetadataFromMiscInfo>(std::move(misc_info));
101102

102103
std::set<std::string, std::less<void>> system =

base/cvd/cuttlefish/host/commands/assemble_cvd/android_build/misc_info_metadata.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
#pragma once
1717

18+
#include <functional>
1819
#include <map>
1920
#include <memory>
2021
#include <string>
@@ -34,6 +35,6 @@ namespace cuttlefish {
3435
* "vendor" side logical partitions.
3536
*/
3637
Result<std::unique_ptr<AndroidBuild>> AndroidBuildFromMiscInfo(
37-
std::map<std::string, std::string>);
38+
std::map<std::string, std::string, std::less<void>>);
3839

3940
} // namespace cuttlefish

base/cvd/cuttlefish/host/commands/assemble_cvd/android_build/target_files.cc

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class TargetFilesImpl : public AndroidBuild {
5858
return std::make_unique<TargetFilesImpl>(std::move(target_files));
5959
}
6060

61-
Result<std::map<std::string, std::string>> MiscInfo() {
61+
Result<std::map<std::string, std::string, std::less<void>>> MiscInfo() {
6262
static constexpr std::string_view kMiscInfoTxt = "META/misc_info.txt";
6363
std::string contents = CF_EXPECT(archive_.MemberContents(kMiscInfoTxt));
6464
return CF_EXPECT(ParseKeyEqualsValue(contents));
@@ -110,7 +110,8 @@ Result<std::unique_ptr<AndroidBuild>> TargetFiles(BuildArchive archive) {
110110
std::unique_ptr<TargetFilesImpl> target =
111111
CF_EXPECT(TargetFilesImpl::FromBuildArchive(std::move(archive)));
112112

113-
std::map<std::string, std::string> misc_info = CF_EXPECT(target->MiscInfo());
113+
std::map<std::string, std::string, std::less<void>> misc_info =
114+
CF_EXPECT(target->MiscInfo());
114115

115116
std::unique_ptr<AndroidBuild> misc_info_build =
116117
CF_EXPECT(AndroidBuildFromMiscInfo(std::move(misc_info)));

base/cvd/cuttlefish/host/commands/assemble_cvd/misc_info.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
#pragma once
1717

18+
#include <functional>
1819
#include <map>
1920
#include <set>
2021
#include <string>
@@ -24,7 +25,7 @@
2425

2526
namespace cuttlefish {
2627

27-
using MiscInfo = std::map<std::string, std::string>;
28+
using MiscInfo = std::map<std::string, std::string, std::less<void>>;
2829

2930
struct VbmetaArgs {
3031
std::string algorithm;

base/cvd/cuttlefish/host/commands/defaults/defaults.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,15 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
#include <string.h>
1716
#include <unistd.h>
1817

18+
#include <functional>
1919
#include <string_view>
2020

21-
#include <android-base/logging.h>
22-
#include <android-base/macros.h>
23-
#include "absl/cleanup/cleanup.h"
2421
#include "absl/flags/flag.h"
2522
#include "absl/flags/parse.h"
2623
#include "absl/strings/str_format.h"
24+
#include "android-base/logging.h"
2725

2826
#include "cuttlefish/common/libs/key_equals_value/key_equals_value.h"
2927
#include "cuttlefish/host/libs/web/http_client/curl_http_client.h"
@@ -51,8 +49,8 @@ Result<std::string> MetadataValue(std::string_view key) {
5149

5250
Result<std::pair<std::string, std::string>> ParseKeyValueFlag(
5351
const std::string &flag) {
54-
std::map<std::string, std::string> kvs = CF_EXPECT(
55-
ParseKeyEqualsValue(flag));
52+
std::map<std::string, std::string, std::less<void>> kvs =
53+
CF_EXPECT(ParseKeyEqualsValue(flag));
5654
CF_EXPECT(kvs.size() == 1);
5755
return *(kvs.begin());
5856
}
@@ -93,7 +91,8 @@ Result<bool> UseStaticDefaults(const std::optional<std::string> &flag) {
9391
return actual == expected;
9492
}
9593

96-
Result<std::map<std::string, std::string>> DefaultsFromMetadata() {
94+
Result<std::map<std::string, std::string, std::less<void>>>
95+
DefaultsFromMetadata() {
9796
std::string data =
9897
CF_EXPECT(MetadataValue("instance/attributes/cf-defaults"));
9998
return ParseKeyEqualsValue(data);
@@ -119,7 +118,8 @@ Result<int> DefaultsMain(int argc, char *argv[]) {
119118
return 0;
120119
}
121120

122-
Result<std::map<std::string, std::string>> m = DefaultsFromMetadata();
121+
Result<std::map<std::string, std::string, std::less<void>>> m =
122+
DefaultsFromMetadata();
123123
if (!m.ok()) {
124124
LOG(INFO) << "Couldn't get defaults from metadata.";
125125
// Not necessarily an error, so don't report it.

base/cvd/cuttlefish/host/libs/config/config_flag.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
#include <stddef.h>
2020

21+
#include <functional>
2122
#include <map>
2223
#include <optional>
2324
#include <ostream>
@@ -196,7 +197,7 @@ class ConfigFlagImpl : public ConfigFlag {
196197
if (!ReadFileToString(info_path, &android_info)) {
197198
return {};
198199
}
199-
Result<std::map<std::string, std::string>> parsed_config =
200+
Result<std::map<std::string, std::string, std::less<void>>> parsed_config =
200201
ParseKeyEqualsValue(android_info);
201202
if (!parsed_config.ok()) {
202203
return {};

0 commit comments

Comments
 (0)