mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-10-31 16:59:06 +01:00
refactor(track): the sleeper layout split by concern instead of one TrackSleepers.cpp
- SleeperRules: the rules beams are laid by and the faults counted where the layout breaks them - SleeperGeometry: plan helpers, beam boxes with their overlap and support tests and a grid of cells, shared by laying, filling gaps, keeping beams apart and checking instead of three copies of each - SleeperPaths: sampled paths, how near they run and whether one carries another; the tracks near a track and the stretches of a path where a test holds, shared by paths_around/unsettle_around and shared_zones/zones_of - SleeperFeatures: frogs and crossings the timbers turn to; SleeperLines: lines of beams, the rails they carry, where they part - SleeperLayout: clusters and their layout, given the epoch instead of reading it; SleeperModels: the models of the beams - SleeperWorker: the layouts kept per epoch and worked out in the background, behind a small interface - TrackSleepers: the facade, laying the instances, the shared zones and the check - sleepercheck reports a digest of all beams; geomhash skips empty chunks instead of crashing The layout is unchanged: geomhash, sleepercheck with the digest, wings, space, guards, crossings and switches give the same output on baltyk, zz_rozjazdy_id4, zz_rf_slips, zz_rf_wide, zz_slips_s42, zz_demo_przechylka and zz_connections.
This commit is contained in:
38
world/SleeperLayout.h
Normal file
38
world/SleeperLayout.h
Normal file
@@ -0,0 +1,38 @@
|
||||
/*
|
||||
This Source Code Form is subject to the
|
||||
terms of the Mozilla Public License, v.
|
||||
2.0. If a copy of the MPL was not
|
||||
distributed with this file, You can
|
||||
obtain one at
|
||||
http://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <cstdint>
|
||||
#include <map>
|
||||
#include <memory>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
#include "world/TrackSleepers.h"
|
||||
|
||||
// the beams of a cluster of tracks laid out together
|
||||
namespace track_sleepers {
|
||||
|
||||
// the beams of a cluster of tracks laid together, by the track each is laid with
|
||||
struct cluster_beams {
|
||||
std::uint64_t epoch { 0 };
|
||||
std::map<TTrack const *, std::vector<beam>> beams;
|
||||
};
|
||||
|
||||
// the tracks whose timbers are laid together with those of the track: all those reached from it through paths whose plain
|
||||
// sleepers would meet, in the order of their names
|
||||
std::vector<TTrack *> cluster_of( TTrack &Track );
|
||||
// the beams of the tracks of a cluster, laid out together for the layout of the given epoch
|
||||
std::shared_ptr<cluster_beams> lay_out( std::vector<TTrack *> const &Tracks, std::uint64_t const Epoch );
|
||||
// how far the paths of the switch stand off one plane where they share the timbers of its panel, and where along the diverging
|
||||
// path; the switch itself is out of shape for its timbers where it's more than the tolerance
|
||||
std::pair<double, double> panel_off_plane( TTrack &Track );
|
||||
|
||||
} // namespace track_sleepers
|
||||
Reference in New Issue
Block a user