Symulator EU07 (i nie tylko) > Na warsztacie
Instalator+Starter+Edytor (Rainsted)
Ra:
Dzięki za komentarze.
Dopracowywuję parser składni... Aktualnie zastanawiam się, jak obsłużyć zmienną ilość liczb w node ... lines. No i zdarza się przepełnienie stosu przy rekurencyjnym usuwaniu wpisów z pamięci po wyborze innej scenerii lub wyjściu z programu. Muszę to zrobić inaczej.
Potrzebuję wyjaśnień co do szczegółów składni (lub działających przykładów) w zakresie:
1. Wpisu node ... traction z eventem - nie znalazłem takiego.
2. Wpisu node ... line_strip - nie znalazłem takiego.
3. Wpisu node ... line_loop - nie znalazłem takiego.
4. Słowa novis zamiast unvis - są jeszcze jakieś wyjątki?
uetam:
w trakcji nie ma nigdy eventow gdyz sie po niej nie jezdzi :)
vis/unvis a nie novis ztcp :)
El Mecánico:
@Ra: W jakim środowisku programistycznym pracujesz? Jeśli to jakieś C to da się zwiększyć rozmiar stosu. Ew, zamiast stosować rekurencji mógłbyś parsować ten sam plik w kilku przebiegach, za każdym razem poszukując innego interesującego ciągu znaków. Oprużnianie pamieci zwal na destruktory klas (programujesz obiektowo, nie strukturalnie, mam nadzieję:D).
Ra:
Nie chcę, żeby mi się składnia wywalała, jak ktoś dopisze event do trakcji i póki co nie wiem, jak go dopisać prawidłowo. Jest tak:
--- Cytat: Scenery.doc ---2.1.2 Traction
(...)
CurrentEvent (opcjonalny) - zdarzenie które zostanie uruchomione gdy dynamic pobiera prąd z sieci.
--- Koniec cytatu ---
Słowo novis znalazł mi parser. Jest w wielu plikach, podobnie jak unvis. Na przykład
--- Cytat: quark-testowo.scm ---12590: node -1 0 none track normal 0.2 1.435 0.2 -1 1 1 flat novis
12591: -20.9722 1.10001 334.334 0.0 //point 1
12592: 0.0 0.0 0.0 //control vector 1
12593: 0.0 0.0 0.0 //control vector 2
12594: -20.9722 1.10001 334.634 0.0 //point 2
12595: 0
12596: endtrack
27061: node -1 0 none-stop track normal 10.0 1.435 0.25 20 20 128 flat unvis
27062: -75.7703 0.200012 -320.0 0.0 //point 1
27063: 0.0 0.0 0.0 //control vector 1
27064: 0.0 0.0 0.0 //control vector 2
27065: -75.7701 0.8 -326.709 0.0 //point 2
27066: 0
27067: velocity 5.0
27068: endtrack
--- Koniec cytatu ---
Pierwszy jest w koźle za wagonami mieszkalnymi (wg testowo2.scn; WielkiKac_bocznica1), a drugi jest na końcu toru, z którego odjeżdża SN61 z wagonami (tor8).
Używam Borland C++ Builder 4.0 Pro. Zwiększenie stosu to rozwiązanie chwilowe, zawsze ktoś może napisać większą trasę bądź połączyć kilka istniejących. Przy parsowaniu nie ma problemu ze stosem, bo rekurencję tworzą tylko include oraz origin (w porywach też trainset). Problem jest przy usuwaniu obiektów, bo destruktor obiektu sprawdza, czy ma ogon i jeśli tak, to wywołuje destruktor tego ogona. W ten sposób wywoływane destruktory odkładają się na stosie i przy paru tysiącach się on przepłnia (np. dla quarkmc28.scm tworzonych jest 20255 obiektów).
Do tego mam jakiś zawirowanie z funkcjami wirtualnymi - przy śledzeniu destruktora trafiam do funkcji, której wywołania na pewno nie ma. Pomaga dopiero jawne deklarowanie pustych konstruktorów i destruktorów, co jest trochę upierdliwe.
Parser jest na ukończeniu. Poza przetestowaniem wyjątkowo rzadkich wpisów, do zrobienia mam teraz podmianę parametrów formalnych w include, a następnie tworzenie list poszczególnych rodzajów obiektów i plików. Przydało by się również łączyć komentarze z wpisami znajdującymi się przed albo po takim komentarzu, a na razie robione są z nich osobne obiekty.
El Mecánico:
Borland jest OK, nie mam zastrzeżeń do kolegi:D
--- Cytat: Ra ---Przy parsowaniu nie ma problemu ze stosem, bo rekurencję tworzą tylko include oraz origin (w porywach też trainset).
--- Koniec cytatu ---
Sprawdzasz, czy nie ma wielokrotnego dołączania plików? Jeśli jeden plik był dołączony chociaż raz, to ni ma potrzeby robić z nim drugi raz. Oznaczyć jako zrobiony i nie zajmować ponownie pamięci, a odwoływać się przez wskażnik.
--- Cytat: Ra ---Do tego mam jakiś zawirowanie z funkcjami wirtualnymi - przy śledzeniu destruktora trafiam do funkcji, której wywołania na pewno nie ma. Pomaga dopiero jawne deklarowanie pustych konstruktorów i destruktorów, co jest trochę upierdliwe.
--- Koniec cytatu ---
Nie upierdliwe, tylko to jest dobry nawyk. Zawsze w klasie wal deklarację destruktora, choćby miał nic nie robić (bo i tak robi, a kompilator nie wygeneruje błędnych odwołań).
--- Cytat: Ra ---Parser jest na ukończeniu.
--- Koniec cytatu ---
No to trzymam kciuki. Uda się na pewno, bo przecież symek jakoś parsuje te wszystkie pliki i jak do tej pory nie widziałem "Stack overflow":D
Nawigacja
[#] Następna strona
Idź do wersji pełnej