Make EmptyRemoteLocation equal to empty partial remote location.

GitOrigin-RevId: 5b8c84dcf53655fe1d8380bf3d6dc552939847a3
This commit is contained in:
levlam 2018-12-27 04:36:20 +03:00
parent c0f19bf6fd
commit 5182709012

View File

@ -845,18 +845,15 @@ class RemoteFileLocation {
void parse(ParserT &parser) { void parse(ParserT &parser) {
auto type = static_cast<Type>(parser.fetch_int()); auto type = static_cast<Type>(parser.fetch_int());
switch (type) { switch (type) {
case Type::Empty: { case Type::Empty:
variant_ = EmptyRemoteFileLocation(); variant_ = EmptyRemoteFileLocation();
return; return;
} case Type::Partial:
case Type::Partial: {
variant_ = PartialRemoteFileLocation(); variant_ = PartialRemoteFileLocation();
return partial().parse(parser); return partial().parse(parser);
} case Type::Full:
case Type::Full: {
variant_ = FullRemoteFileLocation(); variant_ = FullRemoteFileLocation();
return full().parse(parser); return full().parse(parser);
}
} }
parser.set_error("Invalid type in RemoteFileLocation"); parser.set_error("Invalid type in RemoteFileLocation");
} }
@ -879,9 +876,26 @@ class RemoteFileLocation {
Variant<EmptyRemoteFileLocation, PartialRemoteFileLocation, FullRemoteFileLocation> variant_; Variant<EmptyRemoteFileLocation, PartialRemoteFileLocation, FullRemoteFileLocation> variant_;
friend bool operator==(const RemoteFileLocation &lhs, const RemoteFileLocation &rhs); friend bool operator==(const RemoteFileLocation &lhs, const RemoteFileLocation &rhs);
bool is_empty() const {
switch (type()) {
case Type::Empty:
return true;
case Type::Partial:
return partial().ready_part_count_ == 0;
case Type::Full:
return false;
default:
UNREACHABLE();
return false;
}
}
}; };
inline bool operator==(const RemoteFileLocation &lhs, const RemoteFileLocation &rhs) { inline bool operator==(const RemoteFileLocation &lhs, const RemoteFileLocation &rhs) {
if (lhs.is_empty() && rhs.is_empty()) {
return true;
}
return lhs.variant_ == rhs.variant_; return lhs.variant_ == rhs.variant_;
} }