MCPcopy Create free account
hub / github.com/comaps/comaps / HouseChain

Class HouseChain

libs/search/house_detector.cpp:327–379  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

325}
326
327struct HouseChain
328{
329 vector<HouseProjection const *> houses;
330 set<string> chainHouses;
331 double score = 0.0;
332 int minHouseNumber = -1;
333 int maxHouseNumber = numeric_limits<int>::max();
334
335 HouseChain() = default;
336
337 explicit HouseChain(HouseProjection const * h)
338 {
339 minHouseNumber = maxHouseNumber = h->m_house->GetIntNumber();
340 Add(h);
341 }
342
343 void Add(HouseProjection const * h)
344 {
345 if (chainHouses.insert(h->m_house->GetNumber()).second)
346 {
347 int num = h->m_house->GetIntNumber();
348 if (num < minHouseNumber)
349 minHouseNumber = num;
350 if (num > maxHouseNumber)
351 maxHouseNumber = num;
352 houses.push_back(h);
353 }
354 }
355
356 bool Find(string const & str) { return (chainHouses.find(str) != chainHouses.end()); }
357
358 void CountScore()
359 {
360 sort(houses.begin(), houses.end(), HouseProjection::LessDistance());
361 size_t const size = houses.size();
362 score = 0;
363 size_t const scoreNumber = 3;
364 for (size_t i = 0; i < scoreNumber; ++i)
365 score += i < size ? houses[i]->m_distMeters : houses.back()->m_distMeters;
366 score /= scoreNumber;
367 }
368
369 bool IsIntersecting(HouseChain const & chain) const
370 {
371 if (minHouseNumber >= chain.maxHouseNumber)
372 return false;
373 if (chain.minHouseNumber >= maxHouseNumber)
374 return false;
375 return true;
376 }
377
378 bool operator<(HouseChain const & p) const { return score < p.score; }
379};
380
381void GetBestHouseFromChains(vector<HouseChain> & houseChains, ResultAccumulator & acc)
382{

Callers 1

ProccessHousesFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected