16
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-07-23 08:39:18 +02:00

maintenance: memory leak fix, default constructors, minor syntax cleanups

This commit is contained in:
tmj-fstate
2018-06-16 15:59:28 +02:00
parent ef5811e6c0
commit 14448d70d1
18 changed files with 74 additions and 61 deletions

View File

@@ -521,7 +521,7 @@ void TController::TableTraceRoute(double fDistance, TDynamicObject *pVehicle)
pTrack = lastspeedpoint.trTrack; pTrack = lastspeedpoint.trTrack;
assert( pTrack != nullptr ); assert( pTrack != nullptr );
// flaga ustawiona, gdy Point2 toru jest blizej // flaga ustawiona, gdy Point2 toru jest blizej
fLastDir = lastspeedpoint.iFlags & spReverse ? -1.0 : 1.0; fLastDir = ( ( ( lastspeedpoint.iFlags & spReverse ) != 0 ) ? -1.0 : 1.0 );
fCurrentDistance = lastspeedpoint.fDist; // aktualna odleglosc do jego Point1 fCurrentDistance = lastspeedpoint.fDist; // aktualna odleglosc do jego Point1
fTrackLength = pTrack->Length(); fTrackLength = pTrack->Length();
} }
@@ -1286,7 +1286,7 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
&& ( true == TestFlag( sSpeedTable[ i ].iFlags, ( spEnabled | spEvent | spPassengerStopPoint ) ) ) && ( true == TestFlag( sSpeedTable[ i ].iFlags, ( spEnabled | spEvent | spPassengerStopPoint ) ) )
&& ( false == isatpassengerstop ) ) { && ( false == isatpassengerstop ) ) {
// ma podjechać bliżej - czy na pewno w tym miejscu taki warunek? // ma podjechać bliżej - czy na pewno w tym miejscu taki warunek?
a = ( iDrivigFlags & moveStopCloser ? a = ( ( ( iDrivigFlags & moveStopCloser ) != 0 ) ?
fAcc : fAcc :
0.0 ); 0.0 );
} }
@@ -4575,14 +4575,14 @@ TController::UpdateSituation(double dt) {
else { else {
// jeśli oba jadą, to przyhamuj lekko i ogranicz prędkość // jeśli oba jadą, to przyhamuj lekko i ogranicz prędkość
if( vehicle->fTrackBlock < ( if( vehicle->fTrackBlock < (
mvOccupied->CategoryFlag & 2 ? ( mvOccupied->CategoryFlag & 2 ) ?
fMaxProximityDist + 0.5 * vel : // cars fMaxProximityDist + 0.5 * vel : // cars
2.0 * fMaxProximityDist + 2.0 * vel ) ) { //others 2.0 * fMaxProximityDist + 2.0 * vel ) ) { //others
// jak tamten jedzie wolniej a jest w drodze hamowania // jak tamten jedzie wolniej a jest w drodze hamowania
AccPreferred = std::min( -0.9, AccPreferred ); AccPreferred = std::min( -0.9, AccPreferred );
VelNext = min_speed( std::round( k ) - 5.0, VelDesired ); VelNext = min_speed( std::round( k ) - 5.0, VelDesired );
if( vehicle->fTrackBlock <= ( if( vehicle->fTrackBlock <= (
mvOccupied->CategoryFlag & 2 ? ( mvOccupied->CategoryFlag & 2 ) ?
fMaxProximityDist : // cars fMaxProximityDist : // cars
2.0 * fMaxProximityDist ) ) { //others 2.0 * fMaxProximityDist ) ) { //others
// try to force speed change if obstacle is really close // try to force speed change if obstacle is really close
@@ -4826,7 +4826,7 @@ TController::UpdateSituation(double dt) {
else { else {
// jeśli daleko jechać nie można // jeśli daleko jechać nie można
if( ActualProximityDist > ( if( ActualProximityDist > (
mvOccupied->CategoryFlag & 2 ? ( mvOccupied->CategoryFlag & 2 ) ?
fMinProximityDist : // cars fMinProximityDist : // cars
fMaxProximityDist ) ) { // trains and others fMaxProximityDist ) ) { // trains and others
// ale ma kawałek do sygnalizatora // ale ma kawałek do sygnalizatora
@@ -5134,7 +5134,7 @@ TController::UpdateSituation(double dt) {
VelDesired - fVelMinus ) ) { VelDesired - fVelMinus ) ) {
// ...jeśli prędkość w kierunku czoła jest mniejsza od dozwolonej o margines // ...jeśli prędkość w kierunku czoła jest mniejsza od dozwolonej o margines
if( ( ActualProximityDist > ( if( ( ActualProximityDist > (
mvOccupied->CategoryFlag & 2 ? ( mvOccupied->CategoryFlag & 2 ) ?
fMinProximityDist : // cars are allowed to move within min proximity distance fMinProximityDist : // cars are allowed to move within min proximity distance
fMaxProximityDist ) ? // other vehicle types keep wider margin fMaxProximityDist ) ? // other vehicle types keep wider margin
true : true :

View File

@@ -39,7 +39,6 @@ TEvent::~TEvent() {
switch (Type) switch (Type)
{ // sprzątanie { // sprzątanie
case tp_Multiple: case tp_Multiple:
// SafeDeleteArray(Params[9].asText); //nie usuwać - nazwa obiektu powiązanego zamieniana na wskaźnik
if (iFlags & conditional_memstring) // o ile jest łańcuch do porównania w memcompare if (iFlags & conditional_memstring) // o ile jest łańcuch do porównania w memcompare
SafeDeleteArray(Params[10].asText); SafeDeleteArray(Params[10].asText);
break; break;
@@ -71,12 +70,6 @@ void TEvent::Conditions(cParser *parser, std::string s)
if (s == "condition") if (s == "condition")
{ // jesli nie "endevent" { // jesli nie "endevent"
std::string token, str; std::string token, str;
if (!asNodeName.empty())
{ // podczepienie łańcucha, jeśli nie jest pusty
// BUG: source of a memory leak -- the array never gets deleted. fix the destructor
Params[9].asText = new char[asNodeName.size() + 1]; // usuwane i zamieniane na wskaźnik
strcpy(Params[9].asText, asNodeName.c_str());
}
parser->getTokens(); parser->getTokens();
*parser >> token; *parser >> token;
str = token; str = token;
@@ -1673,28 +1666,24 @@ event_manager::InitEvents() {
break; break;
} }
case tp_Multiple: { case tp_Multiple: {
std::string cellastext; if( false == event->asNodeName.empty() ) {
if( event->Params[ 9 ].asText != nullptr ) { // przepisanie nazwy do bufora
cellastext = event->Params[ 9 ].asText;
SafeDeleteArray( event->Params[ 9 ].asText );
event->Params[ 9 ].asPointer = nullptr; // zerowanie wskaźnika, aby wykryć brak obeiktu
}
if( event->iFlags & ( conditional_trackoccupied | conditional_trackfree ) ) { if( event->iFlags & ( conditional_trackoccupied | conditional_trackfree ) ) {
// jeśli chodzi o zajetosc toru // jeśli chodzi o zajetosc toru
event->Params[ 9 ].asTrack = simulation::Paths.find( cellastext ); event->Params[ 9 ].asTrack = simulation::Paths.find( event->asNodeName );
if( event->Params[ 9 ].asTrack == nullptr ) { if( event->Params[ 9 ].asTrack == nullptr ) {
ErrorLog( "Bad event: multi-event \"" + event->asName + "\" cannot find track \"" + cellastext + "\"" ); ErrorLog( "Bad event: multi-event \"" + event->asName + "\" cannot find track \"" + event->asNodeName + "\"" );
event->iFlags &= ~( conditional_trackoccupied | conditional_trackfree ); // zerowanie flag event->iFlags &= ~( conditional_trackoccupied | conditional_trackfree ); // zerowanie flag
} }
} }
else if( event->iFlags & ( conditional_memstring | conditional_memval1 | conditional_memval2 ) ) { else if( event->iFlags & ( conditional_memstring | conditional_memval1 | conditional_memval2 ) ) {
// jeśli chodzi o komorke pamieciową // jeśli chodzi o komorke pamieciową
event->Params[ 9 ].asMemCell = simulation::Memory.find( cellastext ); event->Params[ 9 ].asMemCell = simulation::Memory.find( event->asNodeName );
if( event->Params[ 9 ].asMemCell == nullptr ) { if( event->Params[ 9 ].asMemCell == nullptr ) {
ErrorLog( "Bad event: multi-event \"" + event->asName + "\" cannot find memory cell \"" + cellastext + "\"" ); ErrorLog( "Bad event: multi-event \"" + event->asName + "\" cannot find memory cell \"" + event->asNodeName + "\"" );
event->iFlags &= ~( conditional_memstring | conditional_memval1 | conditional_memval2 ); event->iFlags &= ~( conditional_memstring | conditional_memval1 | conditional_memval2 );
} }
} }
}
for( auto &childevent : event->m_children ) { for( auto &childevent : event->m_children ) {
std::get<TEvent *>( childevent ) = FindEvent( std::get<std::string>( childevent ) ); std::get<TEvent *>( childevent ) = FindEvent( std::get<std::string>( childevent ) );
if( std::get<TEvent *>( childevent ) == nullptr ) { if( std::get<TEvent *>( childevent ) == nullptr ) {

View File

@@ -120,6 +120,8 @@ private:
class event_manager { class event_manager {
public: public:
// constructors
event_manager() = default;
// destructor // destructor
~event_manager(); ~event_manager();
// methods // methods

View File

@@ -295,10 +295,10 @@ TMoverParameters::TMoverParameters(double VelInitial, std::string TypeNameInit,
int Cab) ://: T_MoverParameters(VelInitial, TypeNameInit, int Cab) ://: T_MoverParameters(VelInitial, TypeNameInit,
//NameInit, LoadInitial, LoadTypeInitial, Cab) //NameInit, LoadInitial, LoadTypeInitial, Cab)
TypeName( TypeNameInit ), TypeName( TypeNameInit ),
Name( NameInit ),
ActiveCab( Cab ), ActiveCab( Cab ),
LoadType( LoadTypeInitial ),
Load( LoadInitial ), Load( LoadInitial ),
Name( NameInit ) LoadType( LoadTypeInitial )
{ {
WriteLog( WriteLog(
"------------------------------------------------------"); "------------------------------------------------------");
@@ -1579,9 +1579,10 @@ void TMoverParameters::WaterHeaterCheck( double const Timestep ) {
WaterHeater.is_active = false; WaterHeater.is_active = false;
} }
WaterHeater.is_damaged |= ( WaterHeater.is_damaged = (
( true == WaterHeater.is_active ) ( true == WaterHeater.is_damaged )
&& ( false == WaterPump.is_active ) ); || ( ( true == WaterHeater.is_active )
&& ( false == WaterPump.is_active ) ) );
} }
// fuel pump status update // fuel pump status update
@@ -5988,19 +5989,22 @@ bool TMoverParameters::dizel_AutoGearCheck(void)
if (MotorParam[ScndCtrlActualPos].AutoSwitch && if (MotorParam[ScndCtrlActualPos].AutoSwitch &&
(dizel_automaticgearstatus == 0)) // sprawdz czy zmienic biegi (dizel_automaticgearstatus == 0)) // sprawdz czy zmienic biegi
{ {
if ((Vel > MotorParam[ScndCtrlActualPos].mfi) && if( Vel > MotorParam[ ScndCtrlActualPos ].mfi ) {
(ScndCtrlActualPos < ScndCtrlPosNo)) // shift up
{ if( ScndCtrlActualPos < ScndCtrlPosNo ) {
dizel_automaticgearstatus = 1; dizel_automaticgearstatus = 1;
OK = true; OK = true;
} }
else if ((Vel < MotorParam[ScndCtrlActualPos].fi) && (ScndCtrlActualPos > 0)) }
{ else if( Vel < MotorParam[ ScndCtrlActualPos ].fi ) {
// shift down
if( ScndCtrlActualPos > 0 ) {
dizel_automaticgearstatus = -1; dizel_automaticgearstatus = -1;
OK = true; OK = true;
} }
} }
} }
}
if ((dizel_engage < 0.1) && (dizel_automaticgearstatus != 0)) if ((dizel_engage < 0.1) && (dizel_automaticgearstatus != 0))
{ {
if (dizel_automaticgearstatus == 1) if (dizel_automaticgearstatus == 1)

View File

@@ -154,6 +154,7 @@ public:
static float fSquareDist; static float fSquareDist;
static TModel3d *pRoot; static TModel3d *pRoot;
static std::string *pasText; // tekst dla wyświetlacza (!!!! do przemyślenia) static std::string *pasText; // tekst dla wyświetlacza (!!!! do przemyślenia)
TSubModel() = default;
~TSubModel(); ~TSubModel();
int Load(cParser &Parser, TModel3d *Model, /*int Pos,*/ bool dynamic); int Load(cParser &Parser, TModel3d *Model, /*int Pos,*/ bool dynamic);
void ChildAdd(TSubModel *SubModel); void ChildAdd(TSubModel *SubModel);

View File

@@ -29,6 +29,9 @@ void UpdateTimers(bool pause);
class stopwatch { class stopwatch {
public: public:
// constructors
stopwatch() = default;
// methods
void void
start() { start() {
m_start = std::chrono::steady_clock::now(); } m_start = std::chrono::steady_clock::now(); }
@@ -40,6 +43,7 @@ public:
return m_accumulator / 20.f;} return m_accumulator / 20.f;}
private: private:
// members
std::chrono::time_point<std::chrono::steady_clock> m_start { std::chrono::steady_clock::now() }; std::chrono::time_point<std::chrono::steady_clock> m_start { std::chrono::steady_clock::now() };
float m_accumulator { 1000.f / 30.f * 20.f }; // 20 last samples, initial 'neutral' rate of 30 fps float m_accumulator { 1000.f / 30.f * 20.f }; // 20 last samples, initial 'neutral' rate of 30 fps
}; };

View File

@@ -1189,7 +1189,7 @@ void TTrack::create_geometry( gfx::geometrybank_handle const &Bank ) {
{ szyna[ i ].texture.x, { szyna[ i ].texture.x,
szyna[ i ].texture.y } }; szyna[ i ].texture.y } };
if( false == iTrapezoid ) { continue; } if( iTrapezoid == 0 ) { continue; }
// trapez albo przechyłki, to oddzielne punkty na końcu // trapez albo przechyłki, to oddzielne punkty na końcu
rpts1[ 12 + i ] = { rpts1[ 12 + i ] = {

View File

@@ -91,8 +91,6 @@ jawnie nazwę sekcji, ewentualnie nazwę zasilacza (zostanie zastąpiona wskazan
sekcji z sąsiedniego przęsła). sekcji z sąsiedniego przęsła).
*/ */
TTraction::TTraction( scene::node_data const &Nodedata ) : basic_node( Nodedata ) {}
glm::dvec3 LoadPoint( cParser &Input ) { glm::dvec3 LoadPoint( cParser &Input ) {
// pobranie współrzędnych punktu // pobranie współrzędnych punktu
glm::dvec3 point; glm::dvec3 point;
@@ -104,6 +102,8 @@ glm::dvec3 LoadPoint( cParser &Input ) {
return point; return point;
} }
TTraction::TTraction( scene::node_data const &Nodedata ) : basic_node( Nodedata ) {}
void void
TTraction::Load( cParser *parser, glm::dvec3 const &pOrigin ) { TTraction::Load( cParser *parser, glm::dvec3 const &pOrigin ) {

View File

@@ -53,7 +53,8 @@ struct openal_source {
bool is_looping { false }; bool is_looping { false };
sound_properties properties; sound_properties properties;
sync_state sync { sync_state::good }; sync_state sync { sync_state::good };
// constructors
openal_source() = default;
// methods // methods
template <class Iterator_> template <class Iterator_>
openal_source & openal_source &
@@ -102,6 +103,8 @@ class openal_renderer {
friend class opengl_renderer; friend class opengl_renderer;
public: public:
// constructors
openal_renderer() = default;
// destructor // destructor
~openal_renderer(); ~openal_renderer();
// methods // methods

View File

@@ -24,7 +24,7 @@ class cFrustum {
public: public:
// constructors: // constructors:
cFrustum() = default;
// methods: // methods:
// update the frustum to match current view orientation // update the frustum to match current view orientation
void void

View File

@@ -267,6 +267,8 @@ typedef geometry_handle geometrybank_handle;
class geometrybank_manager { class geometrybank_manager {
public: public:
// constructors
geometrybank_manager() = default;
// methods: // methods:
// performs a resource sweep // performs a resource sweep
void update(); void update();

View File

@@ -52,6 +52,8 @@ struct opengl_technique {
class opengl_camera { class opengl_camera {
public: public:
// constructors
opengl_camera() = default;
// methods: // methods:
inline inline
void void
@@ -113,10 +115,10 @@ class opengl_renderer {
public: public:
// types // types
// constructors
opengl_renderer() = default;
// destructor // destructor
~opengl_renderer() { gluDeleteQuadric( m_quadric ); } ~opengl_renderer() { gluDeleteQuadric( m_quadric ); }
// methods // methods
bool bool
Init( GLFWwindow *Window ); Init( GLFWwindow *Window );

View File

@@ -124,7 +124,6 @@ basic_cell::update_events() {
void void
basic_cell::update_sounds() { basic_cell::update_sounds() {
auto const deltatime = Timer::GetDeltaRenderTime();
for( auto *sound : m_sounds ) { for( auto *sound : m_sounds ) {
sound->play_event(); sound->play_event();
} }

View File

@@ -63,6 +63,8 @@ class basic_cell {
friend class opengl_renderer; friend class opengl_renderer;
public: public:
// constructors
basic_cell() = default;
// methods // methods
// legacy method, finds and assigns traction piece to specified pantograph of provided vehicle // legacy method, finds and assigns traction piece to specified pantograph of provided vehicle
void void
@@ -183,6 +185,8 @@ class basic_section {
friend class opengl_renderer; friend class opengl_renderer;
public: public:
// constructors
basic_section() = default;
// methods // methods
// legacy method, finds and assigns traction piece to specified pantograph of provided vehicle // legacy method, finds and assigns traction piece to specified pantograph of provided vehicle
void void

8
sky.h
View File

@@ -16,11 +16,13 @@ class TSky {
friend class opengl_renderer; friend class opengl_renderer;
public:
TSky() = default;
void Init();
private: private:
TModel3d *mdCloud { nullptr }; TModel3d *mdCloud { nullptr };
public:
void Init();
}; };
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------

View File

@@ -16,7 +16,7 @@ public:
// methods: // methods:
void init(); void init();
// constructors: // constructors:
cStars() = default;
// deconstructor: // deconstructor:
// members: // members:

View File

@@ -10,8 +10,8 @@ struct ui_panel {
struct text_line { struct text_line {
glm::vec4 color;
std::string data; std::string data;
glm::vec4 color;
text_line( std::string const &Data, glm::vec4 const &Color): text_line( std::string const &Data, glm::vec4 const &Color):
data(Data), color(Color) data(Data), color(Color)
@@ -33,7 +33,7 @@ public:
// parameters: // parameters:
// constructors: // constructors:
ui_layer() = default;
// destructor: // destructor:
~ui_layer(); ~ui_layer();

View File

@@ -19,13 +19,14 @@ struct TTranscript {
class TTranscripts { class TTranscripts {
public: public:
// constructors
TTranscripts() = default;
// methods // methods
void AddLine( std::string const &txt, float show, float hide, bool it ); void AddLine( std::string const &txt, float show, float hide, bool it );
// dodanie tekstów, długość dźwięku, czy istotne // dodanie tekstów, długość dźwięku, czy istotne
void Add( std::string const &txt, bool background = false ); void Add( std::string const &txt, bool background = false );
// usuwanie niepotrzebnych (ok. 10 razy na sekundę) // usuwanie niepotrzebnych (ok. 10 razy na sekundę)
void Update(); void Update();
// members // members
std::deque<TTranscript> aLines; std::deque<TTranscript> aLines;