Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--base/CMakeLists.txt2
-rw-r--r--base/random.cpp4
-rw-r--r--base/random.hpp5
-rw-r--r--routing/cross_mwm_road_graph.cpp94
-rw-r--r--routing/cross_mwm_road_graph.hpp14
-rw-r--r--routing/routing_integration_tests/cross_section_tests.cpp17
-rw-r--r--search/pre_ranker.cpp6
-rw-r--r--xcode/base/base.xcodeproj/project.pbxproj12
8 files changed, 89 insertions, 65 deletions
diff --git a/base/CMakeLists.txt b/base/CMakeLists.txt
index d4e2ad4bd4..22f1b391a1 100644
--- a/base/CMakeLists.txt
+++ b/base/CMakeLists.txt
@@ -35,6 +35,8 @@ set(
newtype.hpp
normalize_unicode.cpp
observer_list.hpp
+ random.cpp
+ random.hpp
range_iterator.hpp
ref_counted.hpp
rolling_hash.hpp
diff --git a/base/random.cpp b/base/random.cpp
index a6decf8498..964cffa314 100644
--- a/base/random.cpp
+++ b/base/random.cpp
@@ -3,7 +3,7 @@
#include <algorithm>
#include <numeric>
-namespace my
+namespace base
{
std::vector<size_t> RandomSample(size_t n, size_t k, std::minstd_rand & rng)
{
@@ -19,4 +19,4 @@ std::vector<size_t> RandomSample(size_t n, size_t k, std::minstd_rand & rng)
return result;
}
-} // my
+} // base
diff --git a/base/random.hpp b/base/random.hpp
index b17189e36c..267ae22add 100644
--- a/base/random.hpp
+++ b/base/random.hpp
@@ -3,7 +3,8 @@
#include <random>
#include <vector>
-namespace my
+namespace base
{
+// Selects a fair random subset of size min(|n|, |k|) from [0, 1, 2, ..., n - 1].
std::vector<size_t> RandomSample(size_t n, size_t k, std::minstd_rand & rng);
-} // my
+} // base
diff --git a/routing/cross_mwm_road_graph.cpp b/routing/cross_mwm_road_graph.cpp
index 7306ddfd0b..ee3022ff8f 100644
--- a/routing/cross_mwm_road_graph.cpp
+++ b/routing/cross_mwm_road_graph.cpp
@@ -11,76 +11,62 @@ using namespace routing;
inline bool IsValidEdgeWeight(EdgeWeight const & w) { return w != INVALID_EDGE_WEIGHT; }
-template<class CrossNodeType>
+template<class Node>
struct FindingNode
{
- FindingNode(CrossNode const & node, double & minDistance, CrossNodeType & resultingCrossNode)
+ FindingNode(CrossNode const & node, double & minDistance, Node & resultingCrossNode)
: m_node(node), m_minDistance(minDistance), m_resultingCrossNode(resultingCrossNode)
{
}
- void operator()(CrossNodeType const & crossNode) const
+ void operator()(Node const & crossNode) const
{
- if (crossNode.m_nodeId == m_node.node)
+ if (crossNode.m_nodeId != m_node.node)
+ return;
+
+ double const dist = ms::DistanceOnEarth(m_node.point, crossNode.m_point);
+ if (dist < m_minDistance)
{
- double const dist = ms::DistanceOnEarth(m_node.point, crossNode.m_point);
- if (dist < m_minDistance)
- {
- m_minDistance = dist;
- m_resultingCrossNode = crossNode;
- }
+ m_minDistance = dist;
+ m_resultingCrossNode = crossNode;
}
}
CrossNode const & m_node;
double & m_minDistance;
- CrossNodeType & m_resultingCrossNode;
+ Node & m_resultingCrossNode;
};
-double GetAdjacencyCost(CrossRoutingContextReader const & m_currentContext,
+double GetAdjacencyCost(CrossRoutingContextReader const & currentContext,
IngoingCrossNode const & ingoingCrossNode,
OutgoingCrossNode const & outgoingCrossNode)
{
- return m_currentContext.GetAdjacencyCost(ingoingCrossNode, outgoingCrossNode);
+ return currentContext.GetAdjacencyCost(ingoingCrossNode, outgoingCrossNode);
}
-double GetAdjacencyCost(CrossRoutingContextReader const & m_currentContext,
+double GetAdjacencyCost(CrossRoutingContextReader const & currentContext,
OutgoingCrossNode const & outgoingCrossNode,
IngoingCrossNode const & ingoingCrossNode)
{
- return m_currentContext.GetAdjacencyCost(ingoingCrossNode, outgoingCrossNode);
-}
-
-vector<BorderCross> const & ConstructBorderCross(CrossMwmGraph const & crossMwmGraph,
- TRoutingMappingPtr const & currentMapping,
- OutgoingCrossNode const & node)
-{
- return crossMwmGraph.ConstructBorderCrossByOutgoing(node, currentMapping);
-}
-
-vector<BorderCross> const & ConstructBorderCross(CrossMwmGraph const & crossMwmGraph,
- TRoutingMappingPtr const & currentMapping,
- IngoingCrossNode const & node)
-{
- return crossMwmGraph.ConstructBorderCrossByIngoing(node, currentMapping);
+ return GetAdjacencyCost(currentContext, ingoingCrossNode, outgoingCrossNode);
}
-template<class CrossNodeType1, class CrossNodeType2, bool isOutgoing>
+template<class SourceNode, class TargetNode, bool isOutgoing>
struct FillingEdges
{
FillingEdges(TRoutingMappingPtr const & currentMapping, CrossRoutingContextReader const & currentContext,
- CrossNodeType2 const & startingNode, CrossMwmGraph const & crossMwmGraph, vector<CrossWeightedEdge> & adj)
+ SourceNode const & startingNode, CrossMwmGraph const & crossMwmGraph, vector<CrossWeightedEdge> & adj)
: m_currentMapping(currentMapping), m_currentContext(currentContext), m_startingNode(startingNode),
m_crossMwmGraph(crossMwmGraph), m_adj(adj)
{
}
- void operator()(CrossNodeType1 const & node) const
+ void operator()(TargetNode const & node) const
{
TWrittenEdgeWeight const outWeight = GetAdjacencyCost(m_currentContext, m_startingNode, node);
if (outWeight != kInvalidContextEdgeWeight && outWeight != 0)
{
- vector<BorderCross> const & targets = ConstructBorderCross(m_crossMwmGraph, m_currentMapping, node);
+ vector<BorderCross> const & targets = m_crossMwmGraph.ConstructBorderCross(m_currentMapping, node);
for (auto const & target : targets)
{
if (target.toNode.IsValid())
@@ -91,7 +77,7 @@ struct FillingEdges
TRoutingMappingPtr const & m_currentMapping;
CrossRoutingContextReader const & m_currentContext;
- CrossNodeType2 const & m_startingNode;
+ SourceNode const & m_startingNode;
CrossMwmGraph const & m_crossMwmGraph;
vector<CrossWeightedEdge> & m_adj;
};
@@ -112,7 +98,7 @@ void FindOutgoingCrossNode(CrossRoutingContextReader const & currentContext, Cro
double minDistance = std::numeric_limits<double>::max();
FindingNode<OutgoingCrossNode> findingNode(fromNode, minDistance, outgoingNode);
CHECK(currentContext.ForEachOutgoingNodeNearPoint(fromNode.point, findingNode), ("fromNode.point:", fromNode.point));
- CHECK_NOT_EQUAL(minDistance, std::numeric_limits<double>::max(), ("toNode.point:", fromNode.point));
+ CHECK_NOT_EQUAL(minDistance, std::numeric_limits<double>::max(), ("fromNode.point:", fromNode.point));
}
vector<BorderCross> & FindBorderCross(TWrittenNodeId nodeId,
@@ -122,7 +108,7 @@ vector<BorderCross> & FindBorderCross(TWrittenNodeId nodeId,
bool & result)
{
auto const key = make_pair(nodeId, currentMapping->GetMwmId());
- auto it = cachedNextNodes.find(key);
+ auto const it = cachedNextNodes.find(key);
result = (it == cachedNextNodes.end()) ? false : true;
if (it != cachedNextNodes.end())
{
@@ -181,7 +167,7 @@ IRouter::ResultCode CrossMwmGraph::SetStartNode(CrossNode const & startNode)
{
if (IsValidEdgeWeight(weights[i]))
{
- vector<BorderCross> const & nextCrosses = ConstructBorderCrossByOutgoing(outgoingNodes[i], startMapping);
+ vector<BorderCross> const & nextCrosses = ConstructBorderCrossByOutgoingNode(outgoingNodes[i], startMapping);
for (auto const & nextCross : nextCrosses)
{
if (nextCross.toNode.IsValid())
@@ -256,8 +242,8 @@ IRouter::ResultCode CrossMwmGraph::SetFinalNode(CrossNode const & finalNode)
return IRouter::NoError;
}
-vector<BorderCross> const & CrossMwmGraph::ConstructBorderCrossByOutgoing(OutgoingCrossNode const & startNode,
- TRoutingMappingPtr const & currentMapping) const
+vector<BorderCross> const & CrossMwmGraph::ConstructBorderCrossByOutgoingNode(OutgoingCrossNode const & startNode,
+ TRoutingMappingPtr const & currentMapping) const
{
bool result = false;
vector<BorderCross> & crosses = FindBorderCross(startNode.m_nodeId, currentMapping, m_cachedNextNodesByOutgoing, result);
@@ -268,8 +254,8 @@ vector<BorderCross> const & CrossMwmGraph::ConstructBorderCrossByOutgoing(Outgoi
return crosses;
}
-vector<BorderCross> const & CrossMwmGraph::ConstructBorderCrossByIngoing(IngoingCrossNode const & startNode,
- TRoutingMappingPtr const & currentMapping) const
+vector<BorderCross> const & CrossMwmGraph::ConstructBorderCrossByIngoingNode(IngoingCrossNode const & startNode,
+ TRoutingMappingPtr const & currentMapping) const
{
bool result = false;
vector<BorderCross> & crosses = FindBorderCross(startNode.m_nodeId, currentMapping, m_cachedNextNodesByIngoing, result);
@@ -316,9 +302,9 @@ bool CrossMwmGraph::ConstructBorderCrossByIngoingImpl(IngoingCrossNode const & s
// Note. There's no field |m_ingoingIndex| in class IngoingCrossNode. Because this
// index is not saved in osrm routing section. So we need to write a workaround and
// to check all neighboring mwms.
- for (string const & nextMwm : neighboringMwms)
+ for (string const & prevMwm : neighboringMwms)
{
- TRoutingMappingPtr nextMapping = m_indexManager.GetMappingByName(nextMwm);
+ TRoutingMappingPtr nextMapping = m_indexManager.GetMappingByName(prevMwm);
if (!nextMapping->IsValid())
continue;
@@ -339,6 +325,18 @@ bool CrossMwmGraph::ConstructBorderCrossByIngoingImpl(IngoingCrossNode const & s
return !crosses.empty();
}
+vector<BorderCross> const & CrossMwmGraph::ConstructBorderCross(TRoutingMappingPtr const & currentMapping,
+ OutgoingCrossNode const & node) const
+{
+ return ConstructBorderCrossByOutgoingNode(node, currentMapping);
+}
+
+vector<BorderCross> const & CrossMwmGraph::ConstructBorderCross(TRoutingMappingPtr const & currentMapping,
+ IngoingCrossNode const & node) const
+{
+ return ConstructBorderCrossByIngoingNode(node, currentMapping);
+}
+
void CrossMwmGraph::GetEdgesList(BorderCross const & v, bool isOutgoing, vector<CrossWeightedEdge> & adj) const
{
// Check for virtual edges.
@@ -376,17 +374,15 @@ void CrossMwmGraph::GetEdgesList(BorderCross const & v, bool isOutgoing, vector<
{
IngoingCrossNode ingoingNode;
FindIngoingCrossNode(currentContext, v.toNode, ingoingNode);
- currentContext.ForEachOutgoingNode(
- FillingEdges<OutgoingCrossNode, IngoingCrossNode, true>(currentMapping, currentContext, ingoingNode,
- *this, adj));
+ currentContext.ForEachOutgoingNode(FillingEdges<IngoingCrossNode, OutgoingCrossNode, true /* isOutgoing */>(
+ currentMapping, currentContext, ingoingNode, *this, adj));
}
else
{
OutgoingCrossNode outgoingNode;
FindOutgoingCrossNode(currentContext, v.fromNode, outgoingNode);
- currentContext.ForEachIngoingNode(
- FillingEdges<IngoingCrossNode, OutgoingCrossNode, false>(currentMapping, currentContext, outgoingNode,
- *this, adj));
+ currentContext.ForEachIngoingNode(FillingEdges<OutgoingCrossNode, IngoingCrossNode, false /* isOutgoing */>(
+ currentMapping, currentContext, outgoingNode, *this, adj));
}
}
diff --git a/routing/cross_mwm_road_graph.hpp b/routing/cross_mwm_road_graph.hpp
index 4b60c780de..86cade770e 100644
--- a/routing/cross_mwm_road_graph.hpp
+++ b/routing/cross_mwm_road_graph.hpp
@@ -132,10 +132,15 @@ public:
IRouter::ResultCode SetFinalNode(CrossNode const & finalNode);
// Cashing wrapper for the ConstructBorderCrossByOutgoingImpl function.
- vector<BorderCross> const & ConstructBorderCrossByOutgoing(OutgoingCrossNode const & startNode,
- TRoutingMappingPtr const & currentMapping) const;
- vector<BorderCross> const & ConstructBorderCrossByIngoing(IngoingCrossNode const & startNode,
- TRoutingMappingPtr const & currentMapping) const;
+ vector<BorderCross> const & ConstructBorderCrossByOutgoingNode(OutgoingCrossNode const & startNode,
+ TRoutingMappingPtr const & currentMapping) const;
+ vector<BorderCross> const & ConstructBorderCrossByIngoingNode(IngoingCrossNode const & startNode,
+ TRoutingMappingPtr const & currentMapping) const;
+
+ vector<BorderCross> const & ConstructBorderCross(TRoutingMappingPtr const & currentMapping,
+ OutgoingCrossNode const & node) const;
+ vector<BorderCross> const & ConstructBorderCross(TRoutingMappingPtr const & currentMapping,
+ IngoingCrossNode const & node) const;
private:
// Pure function to construct boder cross by outgoing cross node.
@@ -145,6 +150,7 @@ private:
bool ConstructBorderCrossByIngoingImpl(IngoingCrossNode const & startNode,
TRoutingMappingPtr const & currentMapping,
vector<BorderCross> & crosses) const;
+
/*!
* Adds a virtual edge to the graph so that it is possible to represent
* the final segment of the path that leads from the map's border
diff --git a/routing/routing_integration_tests/cross_section_tests.cpp b/routing/routing_integration_tests/cross_section_tests.cpp
index 93e1445749..b29238c77f 100644
--- a/routing/routing_integration_tests/cross_section_tests.cpp
+++ b/routing/routing_integration_tests/cross_section_tests.cpp
@@ -17,6 +17,7 @@
#include "base/buffer_vector.hpp"
#include "base/logging.hpp"
+#include "base/random.hpp"
#include "std/limits.hpp"
@@ -158,7 +159,13 @@ UNIT_TEST(CrossMwmGraphTest)
RoutingIndexManager manager(countryFileGetter, index);
CrossMwmGraph crossMwmGraph(manager);
- for (platform::LocalCountryFile const & file : localFiles)
+ std::minstd_rand rng;
+ std::vector<size_t> subset = base::RandomSample(localFiles.size(), 10 /* mwm number */, rng);
+ std::vector<platform::LocalCountryFile> subsetCountryFiles;
+ for (size_t i : subset)
+ subsetCountryFiles.push_back(localFiles[i]);
+
+ for (platform::LocalCountryFile const & file : subsetCountryFiles)
{
string const & countryName = file.GetCountryName();
MwmSet::MwmId const mwmId = index.GetMwmIdByCountryFile(file.GetCountryFile());
@@ -166,7 +173,7 @@ UNIT_TEST(CrossMwmGraphTest)
if (countryName == "minsk-pass" || mwmId.GetInfo()->GetType() != MwmInfo::COUNTRY)
continue;
- TEST(mwmId.IsAlive(), ());
+ TEST(mwmId.IsAlive(), ("Mwm name:", countryName, "Subset:", subsetCountryFiles));
TRoutingMappingPtr currentMapping = manager.GetMappingById(mwmId);
if (!currentMapping->IsValid())
continue; // No routing sections in the mwm.
@@ -177,7 +184,7 @@ UNIT_TEST(CrossMwmGraphTest)
currentContext.ForEachIngoingNode([&](IngoingCrossNode const & node)
{
- vector<BorderCross> const & targets = crossMwmGraph.ConstructBorderCrossByIngoing(node, currentMapping);
+ vector<BorderCross> const & targets = crossMwmGraph.ConstructBorderCrossByIngoingNode(node, currentMapping);
for (BorderCross const & t : targets)
{
vector<CrossWeightedEdge> outAdjs;
@@ -190,11 +197,11 @@ UNIT_TEST(CrossMwmGraphTest)
return e.GetTarget() == t && out.GetWeight() == e.GetWeight();
}) != inAdjs.cend(),
("ForEachOutgoingNodeNearPoint() and ForEachIngoingNodeNearPoint() arn't correlated. Mwm:",
- file.GetCountryName()));
+ countryName, "Subset:", subsetCountryFiles));
}
}
});
- LOG(LINFO, ("Processed", file.GetCountryName()));
+ LOG(LINFO, ("Processed", countryName));
}
}
} // namespace
diff --git a/search/pre_ranker.cpp b/search/pre_ranker.cpp
index ba0b629513..05455ced62 100644
--- a/search/pre_ranker.cpp
+++ b/search/pre_ranker.cpp
@@ -266,7 +266,7 @@ void PreRanker::FilterForViewportSearch()
if (m <= old)
{
- for (size_t i : my::RandomSample(old, m, m_rng))
+ for (size_t i : base::RandomSample(old, m, m_rng))
results.push_back(m_results[bucket[i]]);
}
else
@@ -274,7 +274,7 @@ void PreRanker::FilterForViewportSearch()
for (size_t i = 0; i < old; ++i)
results.push_back(m_results[bucket[i]]);
- for (size_t i : my::RandomSample(bucket.size() - old, m - old, m_rng))
+ for (size_t i : base::RandomSample(bucket.size() - old, m - old, m_rng))
results.push_back(m_results[bucket[old + i]]);
}
}
@@ -286,7 +286,7 @@ void PreRanker::FilterForViewportSearch()
else
{
m_results.clear();
- for (size_t i : my::RandomSample(results.size(), BatchSize(), m_rng))
+ for (size_t i : base::RandomSample(results.size(), BatchSize(), m_rng))
m_results.push_back(results[i]);
}
}
diff --git a/xcode/base/base.xcodeproj/project.pbxproj b/xcode/base/base.xcodeproj/project.pbxproj
index 2d015c3726..4d9d859463 100644
--- a/xcode/base/base.xcodeproj/project.pbxproj
+++ b/xcode/base/base.xcodeproj/project.pbxproj
@@ -44,6 +44,9 @@
39FD27381CC65AD000AFF551 /* timegm_test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39FD26E21CC65A0E00AFF551 /* timegm_test.cpp */; };
39FD27391CC65AD000AFF551 /* timer_test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39FD26E31CC65A0E00AFF551 /* timer_test.cpp */; };
39FD273B1CC65B1000AFF551 /* libbase.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 675341771A3F57BF00A0A8C3 /* libbase.a */; };
+ 56B1A0741E69DE4D00395022 /* random.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 56B1A0711E69DE4D00395022 /* random.cpp */; };
+ 56B1A0751E69DE4D00395022 /* random.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 56B1A0721E69DE4D00395022 /* random.hpp */; };
+ 56B1A0761E69DE4D00395022 /* small_set.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 56B1A0731E69DE4D00395022 /* small_set.hpp */; };
670E39441C46C76900E9C0A6 /* sunrise_sunset.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 670E39421C46C76900E9C0A6 /* sunrise_sunset.cpp */; };
670E39451C46C76900E9C0A6 /* sunrise_sunset.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 670E39431C46C76900E9C0A6 /* sunrise_sunset.hpp */; };
671182F01C807C0A00CB8177 /* gmtime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 671182EE1C807C0A00CB8177 /* gmtime.cpp */; };
@@ -157,6 +160,9 @@
39FD273D1CC65B1000AFF551 /* libplatform.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libplatform.a; path = "../../../omim-xcode-build/Debug/libplatform.a"; sourceTree = "<group>"; };
39FD27401CC65B2800AFF551 /* libindexer.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libindexer.a; path = "../../../omim-xcode-build/Debug/libindexer.a"; sourceTree = "<group>"; };
39FD27421CC65B4800AFF551 /* libcoding.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libcoding.a; path = "../../../omim-xcode-build/Debug/libcoding.a"; sourceTree = "<group>"; };
+ 56B1A0711E69DE4D00395022 /* random.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = random.cpp; sourceTree = "<group>"; };
+ 56B1A0721E69DE4D00395022 /* random.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = random.hpp; sourceTree = "<group>"; };
+ 56B1A0731E69DE4D00395022 /* small_set.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = small_set.hpp; sourceTree = "<group>"; };
670E39421C46C76900E9C0A6 /* sunrise_sunset.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sunrise_sunset.cpp; sourceTree = "<group>"; };
670E39431C46C76900E9C0A6 /* sunrise_sunset.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = sunrise_sunset.hpp; sourceTree = "<group>"; };
671182EE1C807C0A00CB8177 /* gmtime.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gmtime.cpp; sourceTree = "<group>"; };
@@ -311,6 +317,9 @@
675341791A3F57BF00A0A8C3 /* base */ = {
isa = PBXGroup;
children = (
+ 56B1A0711E69DE4D00395022 /* random.cpp */,
+ 56B1A0721E69DE4D00395022 /* random.hpp */,
+ 56B1A0731E69DE4D00395022 /* small_set.hpp */,
675341851A3F57E400A0A8C3 /* array_adapters.hpp */,
675341861A3F57E400A0A8C3 /* assert.hpp */,
675341871A3F57E400A0A8C3 /* base.cpp */,
@@ -420,6 +429,7 @@
675341D11A3F57E400A0A8C3 /* cache.hpp in Headers */,
675341E31A3F57E400A0A8C3 /* math.hpp in Headers */,
3446C6731DDCA96300146687 /* levenshtein_dfa.hpp in Headers */,
+ 56B1A0751E69DE4D00395022 /* random.hpp in Headers */,
675341E21A3F57E400A0A8C3 /* macros.hpp in Headers */,
672DD4C51E0425600078E13C /* observer_list.hpp in Headers */,
675341EF1A3F57E400A0A8C3 /* rolling_hash.hpp in Headers */,
@@ -452,6 +462,7 @@
675341FA1A3F57E400A0A8C3 /* src_point.hpp in Headers */,
674A7E2F1C0DB03D003D48E1 /* timegm.hpp in Headers */,
675341F71A3F57E400A0A8C3 /* shared_buffer_manager.hpp in Headers */,
+ 56B1A0761E69DE4D00395022 /* small_set.hpp in Headers */,
67B52B611AD3C84E00664C17 /* thread_checker.hpp in Headers */,
672DD4BE1E0425600078E13C /* cancellable.hpp in Headers */,
675341CB1A3F57E400A0A8C3 /* array_adapters.hpp in Headers */,
@@ -601,6 +612,7 @@
67E40EC81E4DC0D500A6D200 /* small_set_test.cpp in Sources */,
6753420E1A3F57E400A0A8C3 /* timer.cpp in Sources */,
675341F61A3F57E400A0A8C3 /* shared_buffer_manager.cpp in Sources */,
+ 56B1A0741E69DE4D00395022 /* random.cpp in Sources */,
675341DA1A3F57E400A0A8C3 /* exception.cpp in Sources */,
675341F91A3F57E400A0A8C3 /* src_point.cpp in Sources */,
675342031A3F57E400A0A8C3 /* strings_bundle.cpp in Sources */,