From 715c6cac0c6297f350c83c1126954f8d5b188bf4 Mon Sep 17 00:00:00 2001 From: Sergey Yershov Date: Tue, 15 Nov 2016 17:14:43 +0300 Subject: Add python bindings for traffic --- CMakeLists.txt | 1 + pyhelpers/pair.hpp | 29 ++++++++++++++++++ pyhelpers/vector_uint8.hpp | 47 +++++++++++++++++++++++++++++ tracking/pytracking/bindings.cpp | 61 ++------------------------------------ traffic/CMakeLists.txt | 3 +- traffic/pytraffic/CMakeLists.txt | 48 ++++++++++++++++++++++++++++++ traffic/pytraffic/bindings.cpp | 64 ++++++++++++++++++++++++++++++++++++++++ 7 files changed, 194 insertions(+), 59 deletions(-) create mode 100644 pyhelpers/pair.hpp create mode 100644 pyhelpers/vector_uint8.hpp create mode 100644 traffic/pytraffic/CMakeLists.txt create mode 100644 traffic/pytraffic/bindings.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 20ad050b20..a48e2db26f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -159,4 +159,5 @@ add_subdirectory(editor) add_subdirectory(indexer) add_subdirectory(routing) add_subdirectory(search) +add_subdirectory(traffic) add_subdirectory(tracking) diff --git a/pyhelpers/pair.hpp b/pyhelpers/pair.hpp new file mode 100644 index 0000000000..54155aed4c --- /dev/null +++ b/pyhelpers/pair.hpp @@ -0,0 +1,29 @@ +#pragma once + +#include "std/utility.hpp" + +#include +#include + +namespace +{ +using namespace boost::python; + +// Converts a std::pair instance to a Python tuple. +template +struct pair_to_tuple +{ + static PyObject * convert(pair const & p) + { + return incref(make_tuple(p.first, p.second).ptr()); + } + + static PyTypeObject const * get_pytype() { return &PyTuple_Type; } +}; + +template +struct pair_to_python_converter +{ + pair_to_python_converter() { to_python_converter, pair_to_tuple, true>(); } +}; +} // namespace diff --git a/pyhelpers/vector_uint8.hpp b/pyhelpers/vector_uint8.hpp new file mode 100644 index 0000000000..f1bebc5ff3 --- /dev/null +++ b/pyhelpers/vector_uint8.hpp @@ -0,0 +1,47 @@ +#pragma once + +#include "std/vector.hpp" + +#include +#include + +namespace +{ +using namespace boost::python; + +// Converts a vector to/from Python str. +struct vector_uint8t_to_str +{ + static PyObject * convert(vector const & v) + { + str s(reinterpret_cast(v.data()), v.size()); + return incref(s.ptr()); + } +}; + +struct vector_uint8t_from_python_str +{ + vector_uint8t_from_python_str() + { + converter::registry::push_back(&convertible, &construct, type_id>()); + } + + static void * convertible(PyObject * obj_ptr) + { + if (!PyString_Check(obj_ptr)) + return nullptr; + return obj_ptr; + } + + static void construct(PyObject * obj_ptr, converter::rvalue_from_python_stage1_data * data) + { + const char * value = PyString_AsString(obj_ptr); + if (value == nullptr) + throw_error_already_set(); + void * storage = + ((converter::rvalue_from_python_storage> *)data)->storage.bytes; + new (storage) vector(value, value + PyString_Size(obj_ptr)); + data->convertible = storage; + } +}; +} // namespace diff --git a/tracking/pytracking/bindings.cpp b/tracking/pytracking/bindings.cpp index 699f0a06b3..3bd9bdd70b 100644 --- a/tracking/pytracking/bindings.cpp +++ b/tracking/pytracking/bindings.cpp @@ -2,67 +2,12 @@ #include "coding/traffic.hpp" +#include "pyhelpers/pair.hpp" +#include "pyhelpers/vector_uint8.hpp" + #include #include -namespace -{ -using namespace boost::python; - -// Converts a std::pair instance to a Python tuple. -template -struct pair_to_tuple -{ - static PyObject * convert(pair const & p) - { - return incref(make_tuple(p.first, p.second).ptr()); - } - - static PyTypeObject const * get_pytype() { return &PyTuple_Type; } -}; - -template -struct pair_to_python_converter -{ - pair_to_python_converter() { to_python_converter, pair_to_tuple, true>(); } -}; - -// Converts a vector to/from Python str. -struct vector_uint8t_to_str -{ - static PyObject * convert(vector const & v) - { - str s(reinterpret_cast(v.data()), v.size()); - return incref(s.ptr()); - } -}; - -struct vector_uint8t_from_python_str -{ - vector_uint8t_from_python_str() - { - converter::registry::push_back(&convertible, &construct, type_id>()); - } - - static void * convertible(PyObject * obj_ptr) - { - if (!PyString_Check(obj_ptr)) - return nullptr; - return obj_ptr; - } - - static void construct(PyObject * obj_ptr, converter::rvalue_from_python_stage1_data * data) - { - const char * value = PyString_AsString(obj_ptr); - if (value == nullptr) - throw_error_already_set(); - void * storage = - ((converter::rvalue_from_python_storage> *)data)->storage.bytes; - new (storage) vector(value, value + PyString_Size(obj_ptr)); - data->convertible = storage; - } -}; -} // namespace BOOST_PYTHON_MODULE(pytracking) { diff --git a/traffic/CMakeLists.txt b/traffic/CMakeLists.txt index 40ac62dd71..c77f3f67ee 100644 --- a/traffic/CMakeLists.txt +++ b/traffic/CMakeLists.txt @@ -10,4 +10,5 @@ set( add_library(${PROJECT_NAME} ${SRC}) -add_subdirectory(traffic_tests) +add_subdirectory(pytraffic) +#add_subdirectory(traffic_tests) diff --git a/traffic/pytraffic/CMakeLists.txt b/traffic/pytraffic/CMakeLists.txt new file mode 100644 index 0000000000..95aa28894d --- /dev/null +++ b/traffic/pytraffic/CMakeLists.txt @@ -0,0 +1,48 @@ +project(pytraffic) + +check_pybindings() + +set( + SRC + bindings.cpp +) + +# Suppress boost-python warnings +add_compile_options( + "-Wno-unused-local-typedef" +) + +set(Boost_USE_MULTITHREADED ON) + +# For macOS we can use static linking, on Linux we can't. +if (PLATFORM_MAC) + set(Boost_USE_STATIC_LIBS ON) + set(Boost_USE_STATIC_RUNTIME ON) +endif() + +find_package(PythonLibs 2.7 REQUIRED) +find_package(Boost 1.54 REQUIRED COMPONENTS python) +include_directories(${PYTHON_INCLUDE_DIRS}) + +add_library(${PROJECT_NAME} MODULE ${SRC}) + +if (PLATFORM_MAC) + omim_link_libraries( + ${PROJECT_NAME} + ${Qt5Widgets_LIBRARIES} + "-framework Cocoa" + "-framework IOKit" + "-framework QuartzCore" + "-framework SystemConfiguration" + ) +endif() + +if (PLATFORM_WIN OR PLATFORM_LINUX) + omim_link_libraries( + ${PROJECT_NAME} + ${Qt5Widgets_LIBRARIES} + ) +endif() + +omim_link_libraries(${PROJECT_NAME} ${PYTHON_LIBRARIES} ${Boost_LIBRARIES} traffic platform geometry base) +set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "") diff --git a/traffic/pytraffic/bindings.cpp b/traffic/pytraffic/bindings.cpp new file mode 100644 index 0000000000..7d31ee2e27 --- /dev/null +++ b/traffic/pytraffic/bindings.cpp @@ -0,0 +1,64 @@ +#include "traffic/traffic_info.hpp" +#include "traffic/speed_groups.hpp" + +#include "pyhelpers/vector_uint8.hpp" + +#include +#include + +namespace +{ +using namespace boost::python; + +vector Serialize(traffic::TrafficInfo::Coloring const & coloring) +{ + vector data; + traffic::TrafficInfo::SerializeTrafficData(coloring, data); + return data; +} + +traffic::TrafficInfo::Coloring Deserialize(vector const & data) +{ + traffic::TrafficInfo::Coloring coloring; + traffic::TrafficInfo::DeserializeTrafficData(data, coloring); + return coloring; +} + +string RoadSegmentIdRepr(traffic::TrafficInfo::RoadSegmentId const & v) +{ + stringstream ss; + ss << "RoadSegmentId(" << v.m_fid << ", " << v.m_idx << ", " << int(v.m_dir) << ")"; + return ss.str(); +} +} // namespace + +BOOST_PYTHON_MODULE(pytraffic) +{ + using namespace boost::python; + + // Register the to-python converters. + to_python_converter, vector_uint8t_to_str>(); + vector_uint8t_from_python_str(); + + class_("RoadSegmentId", init()) + .def("__repr__", &RoadSegmentIdRepr) + ; + + enum_("SpeedGroup") + .value("G0", traffic::SpeedGroup::G0) + .value("G1", traffic::SpeedGroup::G1) + .value("G2", traffic::SpeedGroup::G2) + .value("G3", traffic::SpeedGroup::G3) + .value("G4", traffic::SpeedGroup::G4) + .value("G5", traffic::SpeedGroup::G5) + .value("TempBlock", traffic::SpeedGroup::TempBlock) + .value("Unknown", traffic::SpeedGroup::Unknown) + ; + + class_("Coloring") + .def(map_indexing_suite()) + ; + + def("dumps", Serialize); + def("loads", Deserialize); +} -- cgit v1.2.3 From c084036b1b320df8948efbedecc905185ee4543f Mon Sep 17 00:00:00 2001 From: Sergey Yershov Date: Tue, 15 Nov 2016 17:17:07 +0300 Subject: Traffic xcode project --- xcode/omim.xcworkspace/contents.xcworkspacedata | 13 + xcode/traffic/traffic.xcodeproj/project.pbxproj | 326 ++++++++++++++++++++++++ 2 files changed, 339 insertions(+) create mode 100644 xcode/traffic/traffic.xcodeproj/project.pbxproj diff --git a/xcode/omim.xcworkspace/contents.xcworkspacedata b/xcode/omim.xcworkspace/contents.xcworkspacedata index 85488ad820..a8f66799af 100644 --- a/xcode/omim.xcworkspace/contents.xcworkspacedata +++ b/xcode/omim.xcworkspace/contents.xcworkspacedata @@ -176,6 +176,16 @@ location = "group:../std/windows.hpp"> + + + + + + @@ -288,6 +298,9 @@ + + diff --git a/xcode/traffic/traffic.xcodeproj/project.pbxproj b/xcode/traffic/traffic.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..e2ce4e7885 --- /dev/null +++ b/xcode/traffic/traffic.xcodeproj/project.pbxproj @@ -0,0 +1,326 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 67BECB5F1DDA44FD00FC4E99 /* speed_groups.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 67BECB5B1DDA44FD00FC4E99 /* speed_groups.cpp */; }; + 67BECB601DDA44FD00FC4E99 /* speed_groups.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 67BECB5C1DDA44FD00FC4E99 /* speed_groups.hpp */; }; + 67BECB611DDA44FD00FC4E99 /* traffic_info.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 67BECB5D1DDA44FD00FC4E99 /* traffic_info.cpp */; }; + 67BECB621DDA44FD00FC4E99 /* traffic_info.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 67BECB5E1DDA44FD00FC4E99 /* traffic_info.hpp */; }; + 67BECB811DDA46A600FC4E99 /* traffic_info_test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 67BECB7F1DDA46A100FC4E99 /* traffic_info_test.cpp */; }; + 67BECB821DDA474400FC4E99 /* libtraffic.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 67BECB4A1DDA43AF00FC4E99 /* libtraffic.a */; }; + 67BECB851DDA474400FC4E99 /* libbase.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 67BECB841DDA474400FC4E99 /* libbase.a */; }; + 67BECB871DDA475500FC4E99 /* libplatform.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 67BECB861DDA475500FC4E99 /* libplatform.a */; }; + 67BECB891DDA476A00FC4E99 /* libcoding.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 67BECB881DDA476A00FC4E99 /* libcoding.a */; }; + 67BECB8C1DDA478E00FC4E99 /* testingmain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 67BECB8A1DDA478800FC4E99 /* testingmain.cpp */; }; + 67BECB8E1DDA47B200FC4E99 /* libtomcrypt.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 67BECB8D1DDA47B200FC4E99 /* libtomcrypt.a */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 67BECB4A1DDA43AF00FC4E99 /* libtraffic.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libtraffic.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 67BECB581DDA43FB00FC4E99 /* common-debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "common-debug.xcconfig"; path = "../common-debug.xcconfig"; sourceTree = ""; }; + 67BECB591DDA440100FC4E99 /* common-release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "common-release.xcconfig"; path = "../common-release.xcconfig"; sourceTree = ""; }; + 67BECB5B1DDA44FD00FC4E99 /* speed_groups.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = speed_groups.cpp; sourceTree = ""; }; + 67BECB5C1DDA44FD00FC4E99 /* speed_groups.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = speed_groups.hpp; sourceTree = ""; }; + 67BECB5D1DDA44FD00FC4E99 /* traffic_info.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = traffic_info.cpp; sourceTree = ""; }; + 67BECB5E1DDA44FD00FC4E99 /* traffic_info.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = traffic_info.hpp; sourceTree = ""; }; + 67BECB671DDA466800FC4E99 /* traffic_tests.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = traffic_tests.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 67BECB7F1DDA46A100FC4E99 /* traffic_info_test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = traffic_info_test.cpp; sourceTree = ""; }; + 67BECB841DDA474400FC4E99 /* libbase.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libbase.a; path = "../../../omim-build/xcode/Debug/libbase.a"; sourceTree = ""; }; + 67BECB861DDA475500FC4E99 /* libplatform.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libplatform.a; path = "../../../omim-build/xcode/Debug/libplatform.a"; sourceTree = ""; }; + 67BECB881DDA476A00FC4E99 /* libcoding.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libcoding.a; path = "../../../omim-build/xcode/Debug/libcoding.a"; sourceTree = ""; }; + 67BECB8A1DDA478800FC4E99 /* testingmain.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = testingmain.cpp; path = ../../testing/testingmain.cpp; sourceTree = ""; }; + 67BECB8D1DDA47B200FC4E99 /* libtomcrypt.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtomcrypt.a; path = "../../../omim-build/xcode/Debug/libtomcrypt.a"; sourceTree = ""; }; + 67BECB941DDA4AC800FC4E99 /* bindings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bindings.cpp; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 67BECB471DDA43AF00FC4E99 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 67BECB641DDA466800FC4E99 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 67BECB8E1DDA47B200FC4E99 /* libtomcrypt.a in Frameworks */, + 67BECB891DDA476A00FC4E99 /* libcoding.a in Frameworks */, + 67BECB871DDA475500FC4E99 /* libplatform.a in Frameworks */, + 67BECB851DDA474400FC4E99 /* libbase.a in Frameworks */, + 67BECB821DDA474400FC4E99 /* libtraffic.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 67BECB411DDA43AF00FC4E99 = { + isa = PBXGroup; + children = ( + 67BECB581DDA43FB00FC4E99 /* common-debug.xcconfig */, + 67BECB591DDA440100FC4E99 /* common-release.xcconfig */, + 67BECB5A1DDA449C00FC4E99 /* traffic */, + 67BECB7E1DDA467A00FC4E99 /* traffic_tests */, + 67BECB8F1DDA47E400FC4E99 /* pytraffic */, + 67BECB4B1DDA43AF00FC4E99 /* Products */, + 67BECB831DDA474400FC4E99 /* Frameworks */, + ); + sourceTree = ""; + }; + 67BECB4B1DDA43AF00FC4E99 /* Products */ = { + isa = PBXGroup; + children = ( + 67BECB4A1DDA43AF00FC4E99 /* libtraffic.a */, + 67BECB671DDA466800FC4E99 /* traffic_tests.app */, + ); + name = Products; + sourceTree = ""; + }; + 67BECB5A1DDA449C00FC4E99 /* traffic */ = { + isa = PBXGroup; + children = ( + 67BECB5B1DDA44FD00FC4E99 /* speed_groups.cpp */, + 67BECB5C1DDA44FD00FC4E99 /* speed_groups.hpp */, + 67BECB5D1DDA44FD00FC4E99 /* traffic_info.cpp */, + 67BECB5E1DDA44FD00FC4E99 /* traffic_info.hpp */, + ); + name = traffic; + path = ../../traffic; + sourceTree = ""; + }; + 67BECB7E1DDA467A00FC4E99 /* traffic_tests */ = { + isa = PBXGroup; + children = ( + 67BECB8A1DDA478800FC4E99 /* testingmain.cpp */, + 67BECB7F1DDA46A100FC4E99 /* traffic_info_test.cpp */, + ); + name = traffic_tests; + path = ../../traffic/traffic_tests; + sourceTree = ""; + }; + 67BECB831DDA474400FC4E99 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 67BECB8D1DDA47B200FC4E99 /* libtomcrypt.a */, + 67BECB881DDA476A00FC4E99 /* libcoding.a */, + 67BECB861DDA475500FC4E99 /* libplatform.a */, + 67BECB841DDA474400FC4E99 /* libbase.a */, + ); + name = Frameworks; + sourceTree = ""; + }; + 67BECB8F1DDA47E400FC4E99 /* pytraffic */ = { + isa = PBXGroup; + children = ( + 67BECB941DDA4AC800FC4E99 /* bindings.cpp */, + ); + name = pytraffic; + path = ../../traffic/pytraffic; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 67BECB481DDA43AF00FC4E99 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 67BECB621DDA44FD00FC4E99 /* traffic_info.hpp in Headers */, + 67BECB601DDA44FD00FC4E99 /* speed_groups.hpp in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 67BECB491DDA43AF00FC4E99 /* traffic */ = { + isa = PBXNativeTarget; + buildConfigurationList = 67BECB551DDA43B000FC4E99 /* Build configuration list for PBXNativeTarget "traffic" */; + buildPhases = ( + 67BECB461DDA43AF00FC4E99 /* Sources */, + 67BECB471DDA43AF00FC4E99 /* Frameworks */, + 67BECB481DDA43AF00FC4E99 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = traffic; + productName = traffic; + productReference = 67BECB4A1DDA43AF00FC4E99 /* libtraffic.a */; + productType = "com.apple.product-type.library.static"; + }; + 67BECB661DDA466800FC4E99 /* traffic_tests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 67BECB7B1DDA466800FC4E99 /* Build configuration list for PBXNativeTarget "traffic_tests" */; + buildPhases = ( + 67BECB631DDA466800FC4E99 /* Sources */, + 67BECB641DDA466800FC4E99 /* Frameworks */, + 67BECB651DDA466800FC4E99 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = traffic_tests; + productName = traffic_tests; + productReference = 67BECB671DDA466800FC4E99 /* traffic_tests.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 67BECB421DDA43AF00FC4E99 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0810; + ORGANIZATIONNAME = Mail.Ru; + TargetAttributes = { + 67BECB491DDA43AF00FC4E99 = { + CreatedOnToolsVersion = 8.1; + ProvisioningStyle = Automatic; + }; + 67BECB661DDA466800FC4E99 = { + CreatedOnToolsVersion = 8.1; + ProvisioningStyle = Automatic; + }; + }; + }; + buildConfigurationList = 67BECB451DDA43AF00FC4E99 /* Build configuration list for PBXProject "traffic" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 67BECB411DDA43AF00FC4E99; + productRefGroup = 67BECB4B1DDA43AF00FC4E99 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 67BECB491DDA43AF00FC4E99 /* traffic */, + 67BECB661DDA466800FC4E99 /* traffic_tests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 67BECB651DDA466800FC4E99 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 67BECB461DDA43AF00FC4E99 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 67BECB5F1DDA44FD00FC4E99 /* speed_groups.cpp in Sources */, + 67BECB611DDA44FD00FC4E99 /* traffic_info.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 67BECB631DDA466800FC4E99 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 67BECB811DDA46A600FC4E99 /* traffic_info_test.cpp in Sources */, + 67BECB8C1DDA478E00FC4E99 /* testingmain.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 67BECB531DDA43B000FC4E99 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 67BECB581DDA43FB00FC4E99 /* common-debug.xcconfig */; + buildSettings = { + }; + name = Debug; + }; + 67BECB541DDA43B000FC4E99 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 67BECB591DDA440100FC4E99 /* common-release.xcconfig */; + buildSettings = { + }; + name = Release; + }; + 67BECB561DDA43B000FC4E99 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + EXECUTABLE_PREFIX = lib; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 67BECB571DDA43B000FC4E99 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + EXECUTABLE_PREFIX = lib; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; + 67BECB7C1DDA466800FC4E99 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + INFOPLIST_FILE = "$(OMIM_ROOT)/iphone/Maps/MAPSME.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "mail.ru.traffic-tests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 67BECB7D1DDA466800FC4E99 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + INFOPLIST_FILE = "$(OMIM_ROOT)/iphone/Maps/MAPSME.plist"; + PRODUCT_BUNDLE_IDENTIFIER = "mail.ru.traffic-tests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 67BECB451DDA43AF00FC4E99 /* Build configuration list for PBXProject "traffic" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 67BECB531DDA43B000FC4E99 /* Debug */, + 67BECB541DDA43B000FC4E99 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 67BECB551DDA43B000FC4E99 /* Build configuration list for PBXNativeTarget "traffic" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 67BECB561DDA43B000FC4E99 /* Debug */, + 67BECB571DDA43B000FC4E99 /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; + 67BECB7B1DDA466800FC4E99 /* Build configuration list for PBXNativeTarget "traffic_tests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 67BECB7C1DDA466800FC4E99 /* Debug */, + 67BECB7D1DDA466800FC4E99 /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; +/* End XCConfigurationList section */ + }; + rootObject = 67BECB421DDA43AF00FC4E99 /* Project object */; +} -- cgit v1.2.3