Make StringPiece to be std::string_view alias
Bug: 237583012
Test: build + boot + UTs
Change-Id: I849831f4466d3b9c7ec842b75256e7fcba77a0c0
diff --git a/tools/aapt2/io/File.h b/tools/aapt2/io/File.h
index 422658a..08d497d 100644
--- a/tools/aapt2/io/File.h
+++ b/tools/aapt2/io/File.h
@@ -101,7 +101,7 @@
public:
virtual ~IFileCollection() = default;
- virtual IFile* FindFile(const android::StringPiece& path) = 0;
+ virtual IFile* FindFile(android::StringPiece path) = 0;
virtual std::unique_ptr<IFileCollectionIterator> Iterator() = 0;
virtual char GetDirSeparator() = 0;
};
diff --git a/tools/aapt2/io/FileSystem.cpp b/tools/aapt2/io/FileSystem.cpp
index 3f071af..a64982a 100644
--- a/tools/aapt2/io/FileSystem.cpp
+++ b/tools/aapt2/io/FileSystem.cpp
@@ -67,8 +67,8 @@
return result;
}
-std::unique_ptr<FileCollection> FileCollection::Create(const android::StringPiece& root,
- std::string* outError) {
+std::unique_ptr<FileCollection> FileCollection::Create(android::StringPiece root,
+ std::string* outError) {
std::unique_ptr<FileCollection> collection =
std::unique_ptr<FileCollection>(new FileCollection());
@@ -80,7 +80,7 @@
std::vector<std::string> sorted_files;
while (struct dirent *entry = readdir(d.get())) {
- std::string prefix_path = root.to_string();
+ std::string prefix_path(root);
file::AppendPath(&prefix_path, entry->d_name);
// The directory to iterate over looking for files
@@ -117,12 +117,19 @@
return collection;
}
-IFile* FileCollection::InsertFile(const StringPiece& path) {
- return (files_[path.to_string()] = util::make_unique<RegularFile>(android::Source(path))).get();
+IFile* FileCollection::InsertFile(StringPiece path) {
+ auto file = util::make_unique<RegularFile>(android::Source(path));
+ auto it = files_.lower_bound(path);
+ if (it != files_.end() && it->first == path) {
+ it->second = std::move(file);
+ } else {
+ it = files_.emplace_hint(it, path, std::move(file));
+ }
+ return it->second.get();
}
-IFile* FileCollection::FindFile(const StringPiece& path) {
- auto iter = files_.find(path.to_string());
+IFile* FileCollection::FindFile(StringPiece path) {
+ auto iter = files_.find(path);
if (iter != files_.end()) {
return iter->second.get();
}
diff --git a/tools/aapt2/io/FileSystem.h b/tools/aapt2/io/FileSystem.h
index bc03b9b..0e798fc 100644
--- a/tools/aapt2/io/FileSystem.h
+++ b/tools/aapt2/io/FileSystem.h
@@ -60,12 +60,11 @@
FileCollection() = default;
/** Creates a file collection containing all files contained in the specified root directory. */
- static std::unique_ptr<FileCollection> Create(const android::StringPiece& path,
- std::string* outError);
+ static std::unique_ptr<FileCollection> Create(android::StringPiece path, std::string* outError);
// Adds a file located at path. Returns the IFile representation of that file.
- IFile* InsertFile(const android::StringPiece& path);
- IFile* FindFile(const android::StringPiece& path) override;
+ IFile* InsertFile(android::StringPiece path);
+ IFile* FindFile(android::StringPiece path) override;
std::unique_ptr<IFileCollectionIterator> Iterator() override;
char GetDirSeparator() override;
@@ -74,7 +73,7 @@
friend class FileCollectionIterator;
- std::map<std::string, std::unique_ptr<IFile>> files_;
+ std::map<std::string, std::unique_ptr<IFile>, std::less<>> files_;
};
} // namespace io
diff --git a/tools/aapt2/io/StringStream.cpp b/tools/aapt2/io/StringStream.cpp
index 4ca04a8..9c49788 100644
--- a/tools/aapt2/io/StringStream.cpp
+++ b/tools/aapt2/io/StringStream.cpp
@@ -21,7 +21,7 @@
namespace aapt {
namespace io {
-StringInputStream::StringInputStream(const StringPiece& str) : str_(str), offset_(0u) {
+StringInputStream::StringInputStream(StringPiece str) : str_(str), offset_(0u) {
}
bool StringInputStream::Next(const void** data, size_t* size) {
diff --git a/tools/aapt2/io/StringStream.h b/tools/aapt2/io/StringStream.h
index f29890a..f7bdecca 100644
--- a/tools/aapt2/io/StringStream.h
+++ b/tools/aapt2/io/StringStream.h
@@ -29,7 +29,7 @@
class StringInputStream : public KnownSizeInputStream {
public:
- explicit StringInputStream(const android::StringPiece& str);
+ explicit StringInputStream(android::StringPiece str);
bool Next(const void** data, size_t* size) override;
diff --git a/tools/aapt2/io/Util.cpp b/tools/aapt2/io/Util.cpp
index afe54d4..79d8d52 100644
--- a/tools/aapt2/io/Util.cpp
+++ b/tools/aapt2/io/Util.cpp
@@ -26,7 +26,7 @@
namespace aapt {
namespace io {
-bool CopyInputStreamToArchive(IAaptContext* context, InputStream* in, const std::string& out_path,
+bool CopyInputStreamToArchive(IAaptContext* context, InputStream* in, std::string_view out_path,
uint32_t compression_flags, IArchiveWriter* writer) {
TRACE_CALL();
if (context->IsVerbose()) {
@@ -43,7 +43,7 @@
return true;
}
-bool CopyFileToArchive(IAaptContext* context, io::IFile* file, const std::string& out_path,
+bool CopyFileToArchive(IAaptContext* context, io::IFile* file, std::string_view out_path,
uint32_t compression_flags, IArchiveWriter* writer) {
TRACE_CALL();
std::unique_ptr<io::IData> data = file->OpenAsData();
@@ -56,13 +56,13 @@
}
bool CopyFileToArchivePreserveCompression(IAaptContext* context, io::IFile* file,
- const std::string& out_path, IArchiveWriter* writer) {
+ std::string_view out_path, IArchiveWriter* writer) {
uint32_t compression_flags = file->WasCompressed() ? ArchiveEntry::kCompress : 0u;
return CopyFileToArchive(context, file, out_path, compression_flags, writer);
}
bool CopyProtoToArchive(IAaptContext* context, ::google::protobuf::Message* proto_msg,
- const std::string& out_path, uint32_t compression_flags,
+ std::string_view out_path, uint32_t compression_flags,
IArchiveWriter* writer) {
TRACE_CALL();
if (context->IsVerbose()) {
@@ -110,7 +110,7 @@
return !in->HadError();
}
-bool Copy(OutputStream* out, const StringPiece& in) {
+bool Copy(OutputStream* out, StringPiece in) {
const char* in_buffer = in.data();
size_t in_len = in.size();
while (in_len != 0) {
diff --git a/tools/aapt2/io/Util.h b/tools/aapt2/io/Util.h
index 1b48a28..685f522 100644
--- a/tools/aapt2/io/Util.h
+++ b/tools/aapt2/io/Util.h
@@ -17,12 +17,11 @@
#ifndef AAPT_IO_UTIL_H
#define AAPT_IO_UTIL_H
-#include <string>
-
-#include "google/protobuf/message.h"
-#include "google/protobuf/io/coded_stream.h"
+#include <string_view>
#include "format/Archive.h"
+#include "google/protobuf/io/coded_stream.h"
+#include "google/protobuf/message.h"
#include "io/File.h"
#include "io/Io.h"
#include "process/IResourceTableConsumer.h"
@@ -30,23 +29,23 @@
namespace aapt {
namespace io {
-bool CopyInputStreamToArchive(IAaptContext* context, InputStream* in, const std::string& out_path,
+bool CopyInputStreamToArchive(IAaptContext* context, InputStream* in, std::string_view out_path,
uint32_t compression_flags, IArchiveWriter* writer);
-bool CopyFileToArchive(IAaptContext* context, IFile* file, const std::string& out_path,
+bool CopyFileToArchive(IAaptContext* context, IFile* file, std::string_view out_path,
uint32_t compression_flags, IArchiveWriter* writer);
bool CopyFileToArchivePreserveCompression(IAaptContext* context, IFile* file,
- const std::string& out_path, IArchiveWriter* writer);
+ std::string_view out_path, IArchiveWriter* writer);
bool CopyProtoToArchive(IAaptContext* context, ::google::protobuf::Message* proto_msg,
- const std::string& out_path, uint32_t compression_flags,
+ std::string_view out_path, uint32_t compression_flags,
IArchiveWriter* writer);
// Copies the data from in to out. Returns false if there was an error.
// If there was an error, check the individual streams' HadError/GetError methods.
bool Copy(OutputStream* out, InputStream* in);
-bool Copy(OutputStream* out, const ::android::StringPiece& in);
+bool Copy(OutputStream* out, android::StringPiece in);
bool Copy(::google::protobuf::io::ZeroCopyOutputStream* out, InputStream* in);
class OutputStreamAdaptor : public io::OutputStream {
diff --git a/tools/aapt2/io/ZipArchive.cpp b/tools/aapt2/io/ZipArchive.cpp
index 400269c..4a5385d 100644
--- a/tools/aapt2/io/ZipArchive.cpp
+++ b/tools/aapt2/io/ZipArchive.cpp
@@ -91,8 +91,8 @@
ZipFileCollection::ZipFileCollection() : handle_(nullptr) {}
-std::unique_ptr<ZipFileCollection> ZipFileCollection::Create(
- const StringPiece& path, std::string* out_error) {
+std::unique_ptr<ZipFileCollection> ZipFileCollection::Create(StringPiece path,
+ std::string* out_error) {
TRACE_CALL();
constexpr static const int32_t kEmptyArchive = -6;
@@ -130,8 +130,8 @@
continue;
}
- std::unique_ptr<IFile> file = util::make_unique<ZipFile>(
- collection->handle_, zip_data, android::Source(zip_entry_path, path.to_string()));
+ std::unique_ptr<IFile> file = util::make_unique<ZipFile>(collection->handle_, zip_data,
+ android::Source(zip_entry_path, path));
collection->files_by_name_[zip_entry_path] = file.get();
collection->files_.push_back(std::move(file));
}
@@ -144,8 +144,8 @@
return collection;
}
-IFile* ZipFileCollection::FindFile(const StringPiece& path) {
- auto iter = files_by_name_.find(path.to_string());
+IFile* ZipFileCollection::FindFile(StringPiece path) {
+ auto iter = files_by_name_.find(path);
if (iter != files_by_name_.end()) {
return iter->second;
}
diff --git a/tools/aapt2/io/ZipArchive.h b/tools/aapt2/io/ZipArchive.h
index 78c9c21..c263aa4 100644
--- a/tools/aapt2/io/ZipArchive.h
+++ b/tools/aapt2/io/ZipArchive.h
@@ -61,10 +61,10 @@
// An IFileCollection that represents a ZIP archive and the entries within it.
class ZipFileCollection : public IFileCollection {
public:
- static std::unique_ptr<ZipFileCollection> Create(const android::StringPiece& path,
+ static std::unique_ptr<ZipFileCollection> Create(android::StringPiece path,
std::string* outError);
- io::IFile* FindFile(const android::StringPiece& path) override;
+ io::IFile* FindFile(android::StringPiece path) override;
std::unique_ptr<IFileCollectionIterator> Iterator() override;
char GetDirSeparator() override;
@@ -76,7 +76,7 @@
ZipArchiveHandle handle_;
std::vector<std::unique_ptr<IFile>> files_;
- std::map<std::string, IFile*> files_by_name_;
+ std::map<std::string, IFile*, std::less<>> files_by_name_;
};
} // namespace io