61 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
| This file is part of Telegram Desktop,
 | |
| the official desktop application for the Telegram messaging service.
 | |
| 
 | |
| For license and copyright information please follow this link:
 | |
| https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
 | |
| */
 | |
| #pragma once
 | |
| 
 | |
| namespace Data {
 | |
| 
 | |
| struct FileOrigin;
 | |
| 
 | |
| class LocationPoint {
 | |
| public:
 | |
| 	LocationPoint() = default;
 | |
| 	explicit LocationPoint(const MTPDgeoPoint &point);
 | |
| 
 | |
| 	[[nodiscard]] QString latAsString() const;
 | |
| 	[[nodiscard]] QString lonAsString() const;
 | |
| 	[[nodiscard]] MTPGeoPoint toMTP() const;
 | |
| 
 | |
| 	[[nodiscard]] float64 lat() const;
 | |
| 	[[nodiscard]] float64 lon() const;
 | |
| 	[[nodiscard]] uint64 accessHash() const;
 | |
| 
 | |
| 	[[nodiscard]] size_t hash() const;
 | |
| 
 | |
| private:
 | |
| 	friend inline bool operator==(
 | |
| 			const LocationPoint &a,
 | |
| 			const LocationPoint &b) {
 | |
| 		return (a._lat == b._lat) && (a._lon == b._lon);
 | |
| 	}
 | |
| 
 | |
| 	friend inline bool operator<(
 | |
| 			const LocationPoint &a,
 | |
| 			const LocationPoint &b) {
 | |
| 		return (a._lat < b._lat) || ((a._lat == b._lat) && (a._lon < b._lon));
 | |
| 	}
 | |
| 
 | |
| 	float64 _lat = 0;
 | |
| 	float64 _lon = 0;
 | |
| 	uint64 _access = 0;
 | |
| 
 | |
| };
 | |
| 
 | |
| [[nodiscard]] GeoPointLocation ComputeLocation(const LocationPoint &point);
 | |
| 
 | |
| } // namespace Data
 | |
| 
 | |
| namespace std {
 | |
| 
 | |
| template <>
 | |
| struct hash<Data::LocationPoint> {
 | |
| 	size_t operator()(const Data::LocationPoint &value) const {
 | |
| 		return value.hash();
 | |
| 	}
 | |
| };
 | |
| 
 | |
| } // namespace std
 | 
