Remove FileLocation.type_ field.

GitOrigin-RevId: ffc776f8975522315543bfac25500592831900d6
This commit is contained in:
levlam 2018-01-20 18:16:51 +03:00
parent 1dffa9608d
commit 7f80ee1119
2 changed files with 20 additions and 20 deletions

View File

@ -700,12 +700,12 @@ class RemoteFileLocation {
enum class Type : int32 { Empty, Partial, Full }; enum class Type : int32 { Empty, Partial, Full };
Type type() const { Type type() const {
return type_; return static_cast<Type>(variant_.get_offset());
} }
template <class StorerT> template <class StorerT>
void store(StorerT &storer) const { void store(StorerT &storer) const {
storer.store_int(static_cast<int32>(type_)); storer.store_int(variant_.get_offset());
bool ok{false}; bool ok{false};
variant_.visit([&](auto &&value) { variant_.visit([&](auto &&value) {
using td::store; using td::store;
@ -728,8 +728,8 @@ class RemoteFileLocation {
} }
template <class ParserT> template <class ParserT>
void parse(ParserT &parser) { void parse(ParserT &parser) {
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;
@ -746,23 +746,21 @@ class RemoteFileLocation {
parser.set_error("Invalid type in RemoteFileLocation"); parser.set_error("Invalid type in RemoteFileLocation");
} }
RemoteFileLocation() : type_(Type::Empty), variant_{EmptyRemoteFileLocation{}} { RemoteFileLocation() : variant_{EmptyRemoteFileLocation{}} {
} }
explicit RemoteFileLocation(const FullRemoteFileLocation &full) : type_(Type::Full), variant_(full) { explicit RemoteFileLocation(const FullRemoteFileLocation &full) : variant_(full) {
} }
explicit RemoteFileLocation(const PartialRemoteFileLocation &partial) : type_(Type::Partial), variant_(partial) { explicit RemoteFileLocation(const PartialRemoteFileLocation &partial) : variant_(partial) {
} }
RemoteFileLocation(FileType file_type, int64 id, int64 access_hash, int32 local_id, int64 volume_id, int64 secret, RemoteFileLocation(FileType file_type, int64 id, int64 access_hash, int32 local_id, int64 volume_id, int64 secret,
DcId dc_id) DcId dc_id)
: type_(Type::Full) : variant_(FullRemoteFileLocation{file_type, id, access_hash, local_id, volume_id, secret, dc_id}) {
, variant_(FullRemoteFileLocation{file_type, id, access_hash, local_id, volume_id, secret, dc_id}) {
} }
RemoteFileLocation(FileType file_type, int64 id, int64 access_hash, DcId dc_id) RemoteFileLocation(FileType file_type, int64 id, int64 access_hash, DcId dc_id)
: type_(Type::Full), variant_(FullRemoteFileLocation{file_type, id, access_hash, dc_id}) { : variant_(FullRemoteFileLocation{file_type, id, access_hash, dc_id}) {
} }
private: private:
Type type_;
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);
@ -889,7 +887,7 @@ class LocalFileLocation {
enum class Type : int32 { Empty, Partial, Full }; enum class Type : int32 { Empty, Partial, Full };
Type type() const { Type type() const {
return type_; return static_cast<Type>(variant_.get_offset());
} }
PartialLocalFileLocation &partial() { PartialLocalFileLocation &partial() {
@ -908,7 +906,7 @@ class LocalFileLocation {
template <class StorerT> template <class StorerT>
void store(StorerT &storer) const { void store(StorerT &storer) const {
using td::store; using td::store;
store(type_, storer); store(variant_.get_offset(), storer);
variant_.visit([&](auto &&value) { variant_.visit([&](auto &&value) {
using td::store; using td::store;
store(value, storer); store(value, storer);
@ -917,8 +915,8 @@ class LocalFileLocation {
template <class ParserT> template <class ParserT>
void parse(ParserT &parser) { void parse(ParserT &parser) {
using td::parse; using td::parse;
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_ = EmptyLocalFileLocation(); variant_ = EmptyLocalFileLocation();
return; return;
@ -932,18 +930,17 @@ class LocalFileLocation {
return parser.set_error("Invalid type in LocalFileLocation"); return parser.set_error("Invalid type in LocalFileLocation");
} }
LocalFileLocation() : type_(Type::Empty), variant_{EmptyLocalFileLocation()} { LocalFileLocation() : variant_{EmptyLocalFileLocation()} {
} }
explicit LocalFileLocation(const PartialLocalFileLocation &partial) : type_(Type::Partial), variant_(partial) { explicit LocalFileLocation(const PartialLocalFileLocation &partial) : variant_(partial) {
} }
explicit LocalFileLocation(const FullLocalFileLocation &full) : type_(Type::Full), variant_(full) { explicit LocalFileLocation(const FullLocalFileLocation &full) : variant_(full) {
} }
LocalFileLocation(FileType file_type, string path, uint64 mtime_nsec) LocalFileLocation(FileType file_type, string path, uint64 mtime_nsec)
: type_(Type::Full), variant_(FullLocalFileLocation{file_type, std::move(path), mtime_nsec}) { : variant_(FullLocalFileLocation{file_type, std::move(path), mtime_nsec}) {
} }
private: private:
Type type_;
Variant<EmptyLocalFileLocation, PartialLocalFileLocation, FullLocalFileLocation> variant_; Variant<EmptyLocalFileLocation, PartialLocalFileLocation, FullLocalFileLocation> variant_;
friend bool operator==(const LocalFileLocation &lhs, const LocalFileLocation &rhs); friend bool operator==(const LocalFileLocation &lhs, const LocalFileLocation &rhs);

View File

@ -233,6 +233,9 @@ class Variant {
return get<offset<T>()>(); return get<offset<T>()>();
} }
int32 get_offset() const {
return offset_;
}
private: private:
union { union {
int64 align_; int64 align_;