Calculate distance in ArticleInfo.

This commit is contained in:
vng 2013-08-06 19:40:38 +03:00
parent 10dd9a2277
commit 7db0aae801
8 changed files with 31 additions and 22 deletions

View file

@ -16,15 +16,18 @@ LOCAL_SRC_FILES := \
# Env files
LOCAL_SRC_FILES += \
../../env/strings.cpp \
../../env/source_address.cpp \
../../env/assert.cpp \
../../env/file_handle.cpp \
../../env/logging.cpp \
../../env/posix.cpp \
../../env/source_address.cpp \
../../env/strings.cpp \
../../3rdparty/utf8proc/utf8proc.c \
# Storage files
LOCAL_SRC_FILES += \
../../storage/storage.cpp \
../../storage/article_info.cpp \
../../storage/distance.cpp \
../../storage/storage.cpp \
include $(BUILD_SHARED_LIBRARY)

View file

@ -2,4 +2,6 @@ APP_STL := gnustl_static
APP_PLATFORM := android-9
LOCAL_PATH := $(call my-dir)
APP_CFLAGS += -I$(LOCAL_PATH)/../../3rdparty/boost
APP_CFLAGS += -I$(LOCAL_PATH)/../../3rdparty/boost
APP_GNUSTL_FORCE_CPP_FEATURES := exceptions rtti

View file

@ -8,6 +8,7 @@
/* Begin PBXBuildFile section */
7722E14817B01B0700CFB817 /* article_info.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7722E14717B01B0700CFB817 /* article_info.cpp */; };
7722E14A17B15C3600CFB817 /* distance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7722E14917B15C3600CFB817 /* distance.cpp */; };
A3E221F317AFB4C20018AB9E /* storage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A3E221F217AFB4C20018AB9E /* storage.cpp */; };
A3E2220C17AFD5840018AB9E /* data in Resources */ = {isa = PBXBuildFile; fileRef = A3E2220B17AFD5840018AB9E /* data */; };
A3E2220F17AFD9E10018AB9E /* assert.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A3E2220E17AFD9E10018AB9E /* assert.cpp */; };
@ -30,6 +31,7 @@
/* Begin PBXFileReference section */
7722E14717B01B0700CFB817 /* article_info.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = article_info.cpp; path = ../../storage/article_info.cpp; sourceTree = "<group>"; };
7722E14917B15C3600CFB817 /* distance.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = distance.cpp; path = ../../storage/distance.cpp; sourceTree = "<group>"; };
A3E221F217AFB4C20018AB9E /* storage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = storage.cpp; path = ../../storage/storage.cpp; sourceTree = "<group>"; };
A3E2220B17AFD5840018AB9E /* data */ = {isa = PBXFileReference; lastKnownFileType = folder; name = data; path = ../../data; sourceTree = "<group>"; };
A3E2220E17AFD9E10018AB9E /* assert.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = assert.cpp; path = ../../env/assert.cpp; sourceTree = "<group>"; };
@ -73,6 +75,7 @@
A3E221ED17AFB49B0018AB9E /* storage */ = {
isa = PBXGroup;
children = (
7722E14917B15C3600CFB817 /* distance.cpp */,
7722E14717B01B0700CFB817 /* article_info.cpp */,
A3E221F217AFB4C20018AB9E /* storage.cpp */,
);
@ -234,6 +237,7 @@
7722E14817B01B0700CFB817 /* article_info.cpp in Sources */,
ED81956E17B10578004F3803 /* strings.cpp in Sources */,
ED81957117B10598004F3803 /* utf8proc.c in Sources */,
7722E14A17B15C3600CFB817 /* distance.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};

View file

@ -1,4 +1,5 @@
#include "article_info.hpp"
#include "distance.hpp"
#include "../env/strings.hpp"
#include "../env/writer.hpp"
@ -58,8 +59,10 @@ void ArticleInfo::Read(rd::Reader & r)
double ArticleInfo::Score(double currLat, double currLon) const
{
/// @todo
return 0.0;
if (m_lat != EMPTY_COORD && m_lon != EMPTY_COORD)
return earth::Distance(m_lat, m_lon, currLat, currLon);
else
return 0.0;
}
void ArticleInfo::Swap(ArticleInfo & i)

View file

@ -1,13 +1,15 @@
#pragma once
#include "storage_common.hpp"
#include "../std/string.hpp"
#include "../std/algorithm.hpp"
namespace wr { class Writer; }
namespace rd { class Reader; }
const int EMPTY_COORD = 1000;
class ArticleInfo
{
void GenerateKey();
@ -31,6 +33,7 @@ public:
void Write(wr::Writer & w) const;
void Read(rd::Reader & r);
/// Calculate score for info. Less is better.
double Score(double currLat, double currLon) const;
void Swap(ArticleInfo & i);

View file

@ -65,21 +65,24 @@ StorageMock::StorageMock()
i1.m_url = "London";
i1.m_thumbnailUrl = "london.jpg";
i1.m_parentUrl = "Europe -> Great Britain";
i1.m_lat = i1.m_lon = -66.666;
i1.m_lat = 51.50726;
i1.m_lon = -0.12765;
m_info.push_back(i1);
ArticleInfo i2("Lancaster");
i2.m_url = "Lancaster";
i2.m_thumbnailUrl = "lancaster.jpg";
i2.m_parentUrl = "Europe -> Great Britain";
i2.m_lat = i2.m_lon = 66.666;
i2.m_lat = 54.04839;
i2.m_lon = -2.79904;
m_info.push_back(i2);
ArticleInfo i3("Great Britain");
i3.m_url = "Great_Britain";
i3.m_thumbnailUrl = "great_britain.jpg";
i3.m_parentUrl = "Europe";
i3.m_lat = i3.m_lon = -66.666;
i3.m_lat = 54.70235;
i3.m_lon = -3.27656;
m_info.push_back(i3);
SortByKey();

View file

@ -18,7 +18,7 @@ public:
void Load(string const & path);
void QueryArticleInfos(vector<ArticleInfo> & out, string const & prefix,
double lat = INVALID_LAT, double lon = INVALID_LON) const;
double lat = EMPTY_COORD, double lon = EMPTY_COORD) const;
protected:
void SortByKey();

View file

@ -1,9 +0,0 @@
#pragma once
#include "../std/string.hpp"
#include "../std/stdint.hpp"
typedef uint32_t ArticleInfoId;
#define INVALID_LAT -720.0
#define INVALID_LON -720.0