Rzutowanie danych na strukture - przejście na wersję obiektową

Odpowiedz Nowy wątek
2019-09-11 14:51
0

Witam.
Analizuję bibliotekę do czytania zmiennych z pliku o zapisie binarnym i wpisywania ich w taki sposób do pliku (pliki .mat z Matlaba). Dane o zmiennej zawierają się w typie strukturalnym:

typedef struct zmienna_typ {
    /* Inne pola z danymi */
    size_t bajty; /* Liczba bajtów zmiennej */
    int rozmiardanych; /* Bajty/element danych */
    int lwymiarow; /* Liczba wymiarów danych */
    size_t * wymiary; /* Długość kolejnych wymiarów */
    enum klasa klasadanych; /* Klasa danych zapisanych w zmiennej */
    char * nazwa; /* Nazwa */
    void * dane; /* Bufor danych zmiennej */
}

Funkcja wpisująca zmienną "danazmienna" do pliku po ustaleniu że jest ona tablicą komórek (więc "dane" stanowią następujące po sobie elementy tego samego typu strukturalnego o innych klasach danych) celem dostania się do danych i poprawnego zapisania ich dokonuje "chamskiego" rzutowania:

   zmienna_typ ** komorki =( zmienna_typ ** ) danazmienna->dane;
   liczbaelementow = danazmienna->bajty / danazmienna->rozmiardanych;
    for ( i = 0; i < liczbaelementow; i++ )
         ZapisPolaTablicyKomorek(mat,komorki[i]);
    break;

Następnie dla elementów tablicy "komorki" wywołuje funkcje zapisu charakterystyczne dla typu "zmienna_typ" (i w zależności od poziomu zagnieżdżenia danych może również dzięki temu wrócić w pewnym momencie do oryginalnej funkcji zapisu).

Problem polega na tym, że muszę cały ten proces przepisać na wersję opartą na klasach (czyli jak mniemam w tym przypadku "zmienna_typ" stanie się klasą) i nie bardzo wiem jak się do tego zabrać.
Czy istnieje jakiś "bezbolesny" sposób zrobienia tego? Zależy mi na jak najprostszym podejściu, aczkolwiek wszelkie sugestie i wskazówki są mile widziane.
Z góry dziękuję za odpowiedź.

Działało to w starej wersji? Np char * też ciężko odwzorować na dysku - AnyKtokolwiek 2019-09-11 15:45
@AnyKtokolwiek O ile sam nie mam jeszcze jak testów wykonać (muszę przyciąć nieobsługiwane elementy, co, obok zrozumienia działania, jest powodem mojej analizy), testy dostarczone z biblioteką wydają się sugerować że wszystko działa. Choć może coś zmienia fakt że te tablice są w stylu Matlaba tj. linijki zawsze dopchane 0 do 8 bajtów. - Daractive 2019-09-11 18:24

Pozostało 580 znaków

2019-09-11 19:49
1

Zapoznaj się z boost::archive zwyczajnie użyj lub zrób podobnie.
https://www.boost.org/doc/lib[...]rialization/doc/tutorial.html


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon, 2019-09-13 09:49
Popraw mnie proszę jeśli się mylę: korzystając z tego mechanizmu mogę po prostu "pakując" i "rozpakowując" "dane" mogę działać podobnie jak na strukturach, tylko z "rozpakowaniem" w zastępstwie rzutowania? (+ Kojarzysz może jakąś stronę gdzie można to w miarę przystępnie ogarnąć? Rozglądałem się już, ale na razie idzie mi to średnio) - Daractive 2019-09-13 04:21

Pozostało 580 znaków

2019-09-13 22:45
1

Ten plik .mat jest jakoś bardzo skomplikowany ? Bo jeśli nie, to może dowolna biblioteczka z obsługą HDF5 sobie poradzi ?

http://arma.sourceforge.net/docs.html


saving/loading matrices & cubes
Nie jestem pewien, ale chyba to nie przegryzie się przez nagłówki z plików, a sama bibliotek wygląda z lekka przerażająco (potrzebuje rozumieć narzędzie z którego korzystam). Tak czy inaczej, dzięki. - Daractive 2019-09-15 04:21

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0